diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@
+ com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame extends BirmmBaseFrame { +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java new file mode 100644 index 0000000..a7094dd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -0,0 +1,88 @@ +package com.casic.missiles.frame.tag; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +import com.casic.missiles.frame.tag.config.*; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; +import com.casic.missiles.frame.tag.signal.PCITag; +import com.casic.missiles.frame.tag.signal.RSRPTag; +import com.casic.missiles.frame.tag.signal.SNRTag; + +public class BirmmTagBuilderFactory { + + public static BirmmBaseTag createTagByOid(String oid) { + BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); + if (null != tag) { + switch (tag) { + case RETRY_TIMES_TAG: + return new RetryTimesTag(); + + case DESTINATION_IP_TAG: + return new DestIPTag(); + + case DESTINATION_PORT_TAG: + return new DestPortTag(); + + case DATE_TAG: + return new DateTag(); + + case DATETIME_TAG: + return new DateTimeTag(); + + case UPLOAD_INTERVAL_TAG: + return new UploadIntervalTag(); + + case START_TIME_TAG: + return new StartTimeTag(); + + case COLLECT_INTERVAL_TAG: + return new CollectIntervalTag(); + + case COLLECT_COUNT_TAG: + return new CollectCountTag(); + + case LOWER_LIMIT_TAG: + return new LowerLimitTag(); + + case UPPER_LIMIT_TAG: + return new UpperLimitTag(); + + case SENSOR_STATE_1_TAG: + case SENSOR_STATE_2_TAG: + case SENSOR_STATE_3_TAG: + case SENSOR_STATE_4_TAG: + case SENSOR_STATE_5_TAG: + // 传感器状态 需要根据设备类型单独处理 + return new SensorStateTag(); + + case CELL_TAG: + return new CellTag(); + + case SOFTWARE_VERSION_TAG: + return new SoftwareVersionTag(); + + case PCI_TAG: + return new PCITag(); + + case RSRP_TAG: + return new RSRPTag(); + + case SNR_TAG: + return new SNRTag(); + + default: + return null; + } + } + + // 业务上传报表 + if (oid.startsWith("C")) { + return new UploadTag(); + } + return null; + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java new file mode 100644 index 0000000..a7094dd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -0,0 +1,88 @@ +package com.casic.missiles.frame.tag; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +import com.casic.missiles.frame.tag.config.*; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; +import com.casic.missiles.frame.tag.signal.PCITag; +import com.casic.missiles.frame.tag.signal.RSRPTag; +import com.casic.missiles.frame.tag.signal.SNRTag; + +public class BirmmTagBuilderFactory { + + public static BirmmBaseTag createTagByOid(String oid) { + BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); + if (null != tag) { + switch (tag) { + case RETRY_TIMES_TAG: + return new RetryTimesTag(); + + case DESTINATION_IP_TAG: + return new DestIPTag(); + + case DESTINATION_PORT_TAG: + return new DestPortTag(); + + case DATE_TAG: + return new DateTag(); + + case DATETIME_TAG: + return new DateTimeTag(); + + case UPLOAD_INTERVAL_TAG: + return new UploadIntervalTag(); + + case START_TIME_TAG: + return new StartTimeTag(); + + case COLLECT_INTERVAL_TAG: + return new CollectIntervalTag(); + + case COLLECT_COUNT_TAG: + return new CollectCountTag(); + + case LOWER_LIMIT_TAG: + return new LowerLimitTag(); + + case UPPER_LIMIT_TAG: + return new UpperLimitTag(); + + case SENSOR_STATE_1_TAG: + case SENSOR_STATE_2_TAG: + case SENSOR_STATE_3_TAG: + case SENSOR_STATE_4_TAG: + case SENSOR_STATE_5_TAG: + // 传感器状态 需要根据设备类型单独处理 + return new SensorStateTag(); + + case CELL_TAG: + return new CellTag(); + + case SOFTWARE_VERSION_TAG: + return new SoftwareVersionTag(); + + case PCI_TAG: + return new PCITag(); + + case RSRP_TAG: + return new RSRPTag(); + + case SNR_TAG: + return new SNRTag(); + + default: + return null; + } + } + + // 业务上传报表 + if (oid.startsWith("C")) { + return new UploadTag(); + } + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java new file mode 100644 index 0000000..43dbb41 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java @@ -0,0 +1,25 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CellTag extends BirmmBaseTag { + + final String CELL_TAG_OID = "60000020"; + + int cellVal; + + @Override + public String toString() { + return super.toString() + "[value: " + cellVal + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + cellVal = Integer.parseInt(valueStr, 16); + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java new file mode 100644 index 0000000..a7094dd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -0,0 +1,88 @@ +package com.casic.missiles.frame.tag; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +import com.casic.missiles.frame.tag.config.*; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; +import com.casic.missiles.frame.tag.signal.PCITag; +import com.casic.missiles.frame.tag.signal.RSRPTag; +import com.casic.missiles.frame.tag.signal.SNRTag; + +public class BirmmTagBuilderFactory { + + public static BirmmBaseTag createTagByOid(String oid) { + BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); + if (null != tag) { + switch (tag) { + case RETRY_TIMES_TAG: + return new RetryTimesTag(); + + case DESTINATION_IP_TAG: + return new DestIPTag(); + + case DESTINATION_PORT_TAG: + return new DestPortTag(); + + case DATE_TAG: + return new DateTag(); + + case DATETIME_TAG: + return new DateTimeTag(); + + case UPLOAD_INTERVAL_TAG: + return new UploadIntervalTag(); + + case START_TIME_TAG: + return new StartTimeTag(); + + case COLLECT_INTERVAL_TAG: + return new CollectIntervalTag(); + + case COLLECT_COUNT_TAG: + return new CollectCountTag(); + + case LOWER_LIMIT_TAG: + return new LowerLimitTag(); + + case UPPER_LIMIT_TAG: + return new UpperLimitTag(); + + case SENSOR_STATE_1_TAG: + case SENSOR_STATE_2_TAG: + case SENSOR_STATE_3_TAG: + case SENSOR_STATE_4_TAG: + case SENSOR_STATE_5_TAG: + // 传感器状态 需要根据设备类型单独处理 + return new SensorStateTag(); + + case CELL_TAG: + return new CellTag(); + + case SOFTWARE_VERSION_TAG: + return new SoftwareVersionTag(); + + case PCI_TAG: + return new PCITag(); + + case RSRP_TAG: + return new RSRPTag(); + + case SNR_TAG: + return new SNRTag(); + + default: + return null; + } + } + + // 业务上传报表 + if (oid.startsWith("C")) { + return new UploadTag(); + } + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java new file mode 100644 index 0000000..43dbb41 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java @@ -0,0 +1,25 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CellTag extends BirmmBaseTag { + + final String CELL_TAG_OID = "60000020"; + + int cellVal; + + @Override + public String toString() { + return super.toString() + "[value: " + cellVal + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + cellVal = Integer.parseInt(valueStr, 16); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java new file mode 100644 index 0000000..2514196 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java @@ -0,0 +1,33 @@ +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 java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTag extends BirmmBaseTag { + + final String DATE_TAG_OID = "10000050"; + + LocalDate date; + + @Override + public String toString() { + return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java new file mode 100644 index 0000000..a7094dd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -0,0 +1,88 @@ +package com.casic.missiles.frame.tag; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +import com.casic.missiles.frame.tag.config.*; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; +import com.casic.missiles.frame.tag.signal.PCITag; +import com.casic.missiles.frame.tag.signal.RSRPTag; +import com.casic.missiles.frame.tag.signal.SNRTag; + +public class BirmmTagBuilderFactory { + + public static BirmmBaseTag createTagByOid(String oid) { + BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); + if (null != tag) { + switch (tag) { + case RETRY_TIMES_TAG: + return new RetryTimesTag(); + + case DESTINATION_IP_TAG: + return new DestIPTag(); + + case DESTINATION_PORT_TAG: + return new DestPortTag(); + + case DATE_TAG: + return new DateTag(); + + case DATETIME_TAG: + return new DateTimeTag(); + + case UPLOAD_INTERVAL_TAG: + return new UploadIntervalTag(); + + case START_TIME_TAG: + return new StartTimeTag(); + + case COLLECT_INTERVAL_TAG: + return new CollectIntervalTag(); + + case COLLECT_COUNT_TAG: + return new CollectCountTag(); + + case LOWER_LIMIT_TAG: + return new LowerLimitTag(); + + case UPPER_LIMIT_TAG: + return new UpperLimitTag(); + + case SENSOR_STATE_1_TAG: + case SENSOR_STATE_2_TAG: + case SENSOR_STATE_3_TAG: + case SENSOR_STATE_4_TAG: + case SENSOR_STATE_5_TAG: + // 传感器状态 需要根据设备类型单独处理 + return new SensorStateTag(); + + case CELL_TAG: + return new CellTag(); + + case SOFTWARE_VERSION_TAG: + return new SoftwareVersionTag(); + + case PCI_TAG: + return new PCITag(); + + case RSRP_TAG: + return new RSRPTag(); + + case SNR_TAG: + return new SNRTag(); + + default: + return null; + } + } + + // 业务上传报表 + if (oid.startsWith("C")) { + return new UploadTag(); + } + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java new file mode 100644 index 0000000..43dbb41 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java @@ -0,0 +1,25 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CellTag extends BirmmBaseTag { + + final String CELL_TAG_OID = "60000020"; + + int cellVal; + + @Override + public String toString() { + return super.toString() + "[value: " + cellVal + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + cellVal = Integer.parseInt(valueStr, 16); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java new file mode 100644 index 0000000..2514196 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java @@ -0,0 +1,33 @@ +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 java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTag extends BirmmBaseTag { + + final String DATE_TAG_OID = "10000050"; + + LocalDate date; + + @Override + public String toString() { + return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java new file mode 100644 index 0000000..a551cd5 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java @@ -0,0 +1,7 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; + +public class SensorStateTag extends BirmmBaseTag { + +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java new file mode 100644 index 0000000..a7094dd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -0,0 +1,88 @@ +package com.casic.missiles.frame.tag; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +import com.casic.missiles.frame.tag.config.*; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; +import com.casic.missiles.frame.tag.signal.PCITag; +import com.casic.missiles.frame.tag.signal.RSRPTag; +import com.casic.missiles.frame.tag.signal.SNRTag; + +public class BirmmTagBuilderFactory { + + public static BirmmBaseTag createTagByOid(String oid) { + BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); + if (null != tag) { + switch (tag) { + case RETRY_TIMES_TAG: + return new RetryTimesTag(); + + case DESTINATION_IP_TAG: + return new DestIPTag(); + + case DESTINATION_PORT_TAG: + return new DestPortTag(); + + case DATE_TAG: + return new DateTag(); + + case DATETIME_TAG: + return new DateTimeTag(); + + case UPLOAD_INTERVAL_TAG: + return new UploadIntervalTag(); + + case START_TIME_TAG: + return new StartTimeTag(); + + case COLLECT_INTERVAL_TAG: + return new CollectIntervalTag(); + + case COLLECT_COUNT_TAG: + return new CollectCountTag(); + + case LOWER_LIMIT_TAG: + return new LowerLimitTag(); + + case UPPER_LIMIT_TAG: + return new UpperLimitTag(); + + case SENSOR_STATE_1_TAG: + case SENSOR_STATE_2_TAG: + case SENSOR_STATE_3_TAG: + case SENSOR_STATE_4_TAG: + case SENSOR_STATE_5_TAG: + // 传感器状态 需要根据设备类型单独处理 + return new SensorStateTag(); + + case CELL_TAG: + return new CellTag(); + + case SOFTWARE_VERSION_TAG: + return new SoftwareVersionTag(); + + case PCI_TAG: + return new PCITag(); + + case RSRP_TAG: + return new RSRPTag(); + + case SNR_TAG: + return new SNRTag(); + + default: + return null; + } + } + + // 业务上传报表 + if (oid.startsWith("C")) { + return new UploadTag(); + } + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java new file mode 100644 index 0000000..43dbb41 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java @@ -0,0 +1,25 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CellTag extends BirmmBaseTag { + + final String CELL_TAG_OID = "60000020"; + + int cellVal; + + @Override + public String toString() { + return super.toString() + "[value: " + cellVal + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + cellVal = Integer.parseInt(valueStr, 16); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java new file mode 100644 index 0000000..2514196 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java @@ -0,0 +1,33 @@ +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 java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTag extends BirmmBaseTag { + + final String DATE_TAG_OID = "10000050"; + + LocalDate date; + + @Override + public String toString() { + return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java new file mode 100644 index 0000000..a551cd5 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java @@ -0,0 +1,7 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; + +public class SensorStateTag extends BirmmBaseTag { + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java new file mode 100644 index 0000000..450a755 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadTag extends BirmmBaseTag { + + private int bizType; + private int interval; + private int startMin; + private LocalDateTime startTime; + + @Override + public String toString() { + return super.toString(); + } + + public boolean checkOid() { + long oidValue = Long.parseLong(getOid(), 16); + + // 数据类型不在范围内则返回false + bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); + if(BirmmDataBizTypeEnums.toType(bizType) == null) { + return false; + } + interval = (int) ((oidValue >> 11) & 0x7FF); + startMin = (int) (oidValue & 0x7FF); + + int hour = startMin / 60; + int minute = startMin % 60; + + startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); + + return true; + } + + public void setStartDate(String dateStr) { + LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + setStartDate(date); + } + + public void setStartDate(LocalDate date) { + startTime = startTime.withYear(date.getYear()); + startTime = startTime.withMonth(date.getMonthValue()); + startTime = startTime.withDayOfMonth(date.getDayOfMonth()); + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java new file mode 100644 index 0000000..a7094dd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -0,0 +1,88 @@ +package com.casic.missiles.frame.tag; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +import com.casic.missiles.frame.tag.config.*; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; +import com.casic.missiles.frame.tag.signal.PCITag; +import com.casic.missiles.frame.tag.signal.RSRPTag; +import com.casic.missiles.frame.tag.signal.SNRTag; + +public class BirmmTagBuilderFactory { + + public static BirmmBaseTag createTagByOid(String oid) { + BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); + if (null != tag) { + switch (tag) { + case RETRY_TIMES_TAG: + return new RetryTimesTag(); + + case DESTINATION_IP_TAG: + return new DestIPTag(); + + case DESTINATION_PORT_TAG: + return new DestPortTag(); + + case DATE_TAG: + return new DateTag(); + + case DATETIME_TAG: + return new DateTimeTag(); + + case UPLOAD_INTERVAL_TAG: + return new UploadIntervalTag(); + + case START_TIME_TAG: + return new StartTimeTag(); + + case COLLECT_INTERVAL_TAG: + return new CollectIntervalTag(); + + case COLLECT_COUNT_TAG: + return new CollectCountTag(); + + case LOWER_LIMIT_TAG: + return new LowerLimitTag(); + + case UPPER_LIMIT_TAG: + return new UpperLimitTag(); + + case SENSOR_STATE_1_TAG: + case SENSOR_STATE_2_TAG: + case SENSOR_STATE_3_TAG: + case SENSOR_STATE_4_TAG: + case SENSOR_STATE_5_TAG: + // 传感器状态 需要根据设备类型单独处理 + return new SensorStateTag(); + + case CELL_TAG: + return new CellTag(); + + case SOFTWARE_VERSION_TAG: + return new SoftwareVersionTag(); + + case PCI_TAG: + return new PCITag(); + + case RSRP_TAG: + return new RSRPTag(); + + case SNR_TAG: + return new SNRTag(); + + default: + return null; + } + } + + // 业务上传报表 + if (oid.startsWith("C")) { + return new UploadTag(); + } + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java new file mode 100644 index 0000000..43dbb41 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java @@ -0,0 +1,25 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CellTag extends BirmmBaseTag { + + final String CELL_TAG_OID = "60000020"; + + int cellVal; + + @Override + public String toString() { + return super.toString() + "[value: " + cellVal + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + cellVal = Integer.parseInt(valueStr, 16); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java new file mode 100644 index 0000000..2514196 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java @@ -0,0 +1,33 @@ +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 java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTag extends BirmmBaseTag { + + final String DATE_TAG_OID = "10000050"; + + LocalDate date; + + @Override + public String toString() { + return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java new file mode 100644 index 0000000..a551cd5 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java @@ -0,0 +1,7 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; + +public class SensorStateTag extends BirmmBaseTag { + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java new file mode 100644 index 0000000..450a755 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadTag extends BirmmBaseTag { + + private int bizType; + private int interval; + private int startMin; + private LocalDateTime startTime; + + @Override + public String toString() { + return super.toString(); + } + + public boolean checkOid() { + long oidValue = Long.parseLong(getOid(), 16); + + // 数据类型不在范围内则返回false + bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); + if(BirmmDataBizTypeEnums.toType(bizType) == null) { + return false; + } + interval = (int) ((oidValue >> 11) & 0x7FF); + startMin = (int) (oidValue & 0x7FF); + + int hour = startMin / 60; + int minute = startMin % 60; + + startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); + + return true; + } + + public void setStartDate(String dateStr) { + LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + setStartDate(date); + } + + public void setStartDate(LocalDate date) { + startTime = startTime.withYear(date.getYear()); + startTime = startTime.withMonth(date.getMonthValue()); + startTime = startTime.withDayOfMonth(date.getDayOfMonth()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java new file mode 100644 index 0000000..6df22bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectCountTag extends BirmmBaseTag { + + final String COLLECT_COUNT_TAG_OID = "10000106"; + + // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 + int count; + + @Override + public String toString() { + return super.toString() + "[value: " + count + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + count = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java new file mode 100644 index 0000000..a7094dd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -0,0 +1,88 @@ +package com.casic.missiles.frame.tag; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +import com.casic.missiles.frame.tag.config.*; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; +import com.casic.missiles.frame.tag.signal.PCITag; +import com.casic.missiles.frame.tag.signal.RSRPTag; +import com.casic.missiles.frame.tag.signal.SNRTag; + +public class BirmmTagBuilderFactory { + + public static BirmmBaseTag createTagByOid(String oid) { + BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); + if (null != tag) { + switch (tag) { + case RETRY_TIMES_TAG: + return new RetryTimesTag(); + + case DESTINATION_IP_TAG: + return new DestIPTag(); + + case DESTINATION_PORT_TAG: + return new DestPortTag(); + + case DATE_TAG: + return new DateTag(); + + case DATETIME_TAG: + return new DateTimeTag(); + + case UPLOAD_INTERVAL_TAG: + return new UploadIntervalTag(); + + case START_TIME_TAG: + return new StartTimeTag(); + + case COLLECT_INTERVAL_TAG: + return new CollectIntervalTag(); + + case COLLECT_COUNT_TAG: + return new CollectCountTag(); + + case LOWER_LIMIT_TAG: + return new LowerLimitTag(); + + case UPPER_LIMIT_TAG: + return new UpperLimitTag(); + + case SENSOR_STATE_1_TAG: + case SENSOR_STATE_2_TAG: + case SENSOR_STATE_3_TAG: + case SENSOR_STATE_4_TAG: + case SENSOR_STATE_5_TAG: + // 传感器状态 需要根据设备类型单独处理 + return new SensorStateTag(); + + case CELL_TAG: + return new CellTag(); + + case SOFTWARE_VERSION_TAG: + return new SoftwareVersionTag(); + + case PCI_TAG: + return new PCITag(); + + case RSRP_TAG: + return new RSRPTag(); + + case SNR_TAG: + return new SNRTag(); + + default: + return null; + } + } + + // 业务上传报表 + if (oid.startsWith("C")) { + return new UploadTag(); + } + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java new file mode 100644 index 0000000..43dbb41 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java @@ -0,0 +1,25 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CellTag extends BirmmBaseTag { + + final String CELL_TAG_OID = "60000020"; + + int cellVal; + + @Override + public String toString() { + return super.toString() + "[value: " + cellVal + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + cellVal = Integer.parseInt(valueStr, 16); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java new file mode 100644 index 0000000..2514196 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java @@ -0,0 +1,33 @@ +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 java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTag extends BirmmBaseTag { + + final String DATE_TAG_OID = "10000050"; + + LocalDate date; + + @Override + public String toString() { + return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java new file mode 100644 index 0000000..a551cd5 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java @@ -0,0 +1,7 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; + +public class SensorStateTag extends BirmmBaseTag { + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java new file mode 100644 index 0000000..450a755 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadTag extends BirmmBaseTag { + + private int bizType; + private int interval; + private int startMin; + private LocalDateTime startTime; + + @Override + public String toString() { + return super.toString(); + } + + public boolean checkOid() { + long oidValue = Long.parseLong(getOid(), 16); + + // 数据类型不在范围内则返回false + bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); + if(BirmmDataBizTypeEnums.toType(bizType) == null) { + return false; + } + interval = (int) ((oidValue >> 11) & 0x7FF); + startMin = (int) (oidValue & 0x7FF); + + int hour = startMin / 60; + int minute = startMin % 60; + + startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); + + return true; + } + + public void setStartDate(String dateStr) { + LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + setStartDate(date); + } + + public void setStartDate(LocalDate date) { + startTime = startTime.withYear(date.getYear()); + startTime = startTime.withMonth(date.getMonthValue()); + startTime = startTime.withDayOfMonth(date.getDayOfMonth()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java new file mode 100644 index 0000000..6df22bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectCountTag extends BirmmBaseTag { + + final String COLLECT_COUNT_TAG_OID = "10000106"; + + // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 + int count; + + @Override + public String toString() { + return super.toString() + "[value: " + count + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + count = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java new file mode 100644 index 0000000..def754c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectIntervalTag extends BirmmBaseTag { + + final String COLLECT_INTERVAL_TAG_OID = "10000105"; + + // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java new file mode 100644 index 0000000..a7094dd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -0,0 +1,88 @@ +package com.casic.missiles.frame.tag; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +import com.casic.missiles.frame.tag.config.*; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; +import com.casic.missiles.frame.tag.signal.PCITag; +import com.casic.missiles.frame.tag.signal.RSRPTag; +import com.casic.missiles.frame.tag.signal.SNRTag; + +public class BirmmTagBuilderFactory { + + public static BirmmBaseTag createTagByOid(String oid) { + BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); + if (null != tag) { + switch (tag) { + case RETRY_TIMES_TAG: + return new RetryTimesTag(); + + case DESTINATION_IP_TAG: + return new DestIPTag(); + + case DESTINATION_PORT_TAG: + return new DestPortTag(); + + case DATE_TAG: + return new DateTag(); + + case DATETIME_TAG: + return new DateTimeTag(); + + case UPLOAD_INTERVAL_TAG: + return new UploadIntervalTag(); + + case START_TIME_TAG: + return new StartTimeTag(); + + case COLLECT_INTERVAL_TAG: + return new CollectIntervalTag(); + + case COLLECT_COUNT_TAG: + return new CollectCountTag(); + + case LOWER_LIMIT_TAG: + return new LowerLimitTag(); + + case UPPER_LIMIT_TAG: + return new UpperLimitTag(); + + case SENSOR_STATE_1_TAG: + case SENSOR_STATE_2_TAG: + case SENSOR_STATE_3_TAG: + case SENSOR_STATE_4_TAG: + case SENSOR_STATE_5_TAG: + // 传感器状态 需要根据设备类型单独处理 + return new SensorStateTag(); + + case CELL_TAG: + return new CellTag(); + + case SOFTWARE_VERSION_TAG: + return new SoftwareVersionTag(); + + case PCI_TAG: + return new PCITag(); + + case RSRP_TAG: + return new RSRPTag(); + + case SNR_TAG: + return new SNRTag(); + + default: + return null; + } + } + + // 业务上传报表 + if (oid.startsWith("C")) { + return new UploadTag(); + } + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java new file mode 100644 index 0000000..43dbb41 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java @@ -0,0 +1,25 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CellTag extends BirmmBaseTag { + + final String CELL_TAG_OID = "60000020"; + + int cellVal; + + @Override + public String toString() { + return super.toString() + "[value: " + cellVal + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + cellVal = Integer.parseInt(valueStr, 16); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java new file mode 100644 index 0000000..2514196 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java @@ -0,0 +1,33 @@ +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 java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTag extends BirmmBaseTag { + + final String DATE_TAG_OID = "10000050"; + + LocalDate date; + + @Override + public String toString() { + return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java new file mode 100644 index 0000000..a551cd5 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java @@ -0,0 +1,7 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; + +public class SensorStateTag extends BirmmBaseTag { + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java new file mode 100644 index 0000000..450a755 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadTag extends BirmmBaseTag { + + private int bizType; + private int interval; + private int startMin; + private LocalDateTime startTime; + + @Override + public String toString() { + return super.toString(); + } + + public boolean checkOid() { + long oidValue = Long.parseLong(getOid(), 16); + + // 数据类型不在范围内则返回false + bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); + if(BirmmDataBizTypeEnums.toType(bizType) == null) { + return false; + } + interval = (int) ((oidValue >> 11) & 0x7FF); + startMin = (int) (oidValue & 0x7FF); + + int hour = startMin / 60; + int minute = startMin % 60; + + startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); + + return true; + } + + public void setStartDate(String dateStr) { + LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + setStartDate(date); + } + + public void setStartDate(LocalDate date) { + startTime = startTime.withYear(date.getYear()); + startTime = startTime.withMonth(date.getMonthValue()); + startTime = startTime.withDayOfMonth(date.getDayOfMonth()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java new file mode 100644 index 0000000..6df22bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectCountTag extends BirmmBaseTag { + + final String COLLECT_COUNT_TAG_OID = "10000106"; + + // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 + int count; + + @Override + public String toString() { + return super.toString() + "[value: " + count + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + count = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java new file mode 100644 index 0000000..def754c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectIntervalTag extends BirmmBaseTag { + + final String COLLECT_INTERVAL_TAG_OID = "10000105"; + + // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java new file mode 100644 index 0000000..bcb3988 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java @@ -0,0 +1,62 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTimeTag extends BirmmBaseTag { + + final String DATETIME_TAG_OID = "10000051"; + + LocalDateTime dateTime; + + @Override + public String toString() { + return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 + + int year = dateTime.getYear() - 2000; + int month = dateTime.getMonthValue(); + int day = dateTime.getDayOfMonth(); + int hour = dateTime.getHour(); + int minute = dateTime.getMinute(); + int second = dateTime.getSecond(); + + result += String.format("%02x", year); + result += String.format("%02x", month); + result += String.format("%02x", day); + result += String.format("%02x", hour); + result += String.format("%02x", minute); + result += String.format("%02x", second); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + String hexH = valueStr.substring(6, 8); + String hexMin = valueStr.substring(8, 10); + String hexS = valueStr.substring(10, 12); + + dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), + BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java new file mode 100644 index 0000000..a7094dd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -0,0 +1,88 @@ +package com.casic.missiles.frame.tag; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +import com.casic.missiles.frame.tag.config.*; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; +import com.casic.missiles.frame.tag.signal.PCITag; +import com.casic.missiles.frame.tag.signal.RSRPTag; +import com.casic.missiles.frame.tag.signal.SNRTag; + +public class BirmmTagBuilderFactory { + + public static BirmmBaseTag createTagByOid(String oid) { + BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); + if (null != tag) { + switch (tag) { + case RETRY_TIMES_TAG: + return new RetryTimesTag(); + + case DESTINATION_IP_TAG: + return new DestIPTag(); + + case DESTINATION_PORT_TAG: + return new DestPortTag(); + + case DATE_TAG: + return new DateTag(); + + case DATETIME_TAG: + return new DateTimeTag(); + + case UPLOAD_INTERVAL_TAG: + return new UploadIntervalTag(); + + case START_TIME_TAG: + return new StartTimeTag(); + + case COLLECT_INTERVAL_TAG: + return new CollectIntervalTag(); + + case COLLECT_COUNT_TAG: + return new CollectCountTag(); + + case LOWER_LIMIT_TAG: + return new LowerLimitTag(); + + case UPPER_LIMIT_TAG: + return new UpperLimitTag(); + + case SENSOR_STATE_1_TAG: + case SENSOR_STATE_2_TAG: + case SENSOR_STATE_3_TAG: + case SENSOR_STATE_4_TAG: + case SENSOR_STATE_5_TAG: + // 传感器状态 需要根据设备类型单独处理 + return new SensorStateTag(); + + case CELL_TAG: + return new CellTag(); + + case SOFTWARE_VERSION_TAG: + return new SoftwareVersionTag(); + + case PCI_TAG: + return new PCITag(); + + case RSRP_TAG: + return new RSRPTag(); + + case SNR_TAG: + return new SNRTag(); + + default: + return null; + } + } + + // 业务上传报表 + if (oid.startsWith("C")) { + return new UploadTag(); + } + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java new file mode 100644 index 0000000..43dbb41 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java @@ -0,0 +1,25 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CellTag extends BirmmBaseTag { + + final String CELL_TAG_OID = "60000020"; + + int cellVal; + + @Override + public String toString() { + return super.toString() + "[value: " + cellVal + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + cellVal = Integer.parseInt(valueStr, 16); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java new file mode 100644 index 0000000..2514196 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java @@ -0,0 +1,33 @@ +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 java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTag extends BirmmBaseTag { + + final String DATE_TAG_OID = "10000050"; + + LocalDate date; + + @Override + public String toString() { + return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java new file mode 100644 index 0000000..a551cd5 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java @@ -0,0 +1,7 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; + +public class SensorStateTag extends BirmmBaseTag { + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java new file mode 100644 index 0000000..450a755 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadTag extends BirmmBaseTag { + + private int bizType; + private int interval; + private int startMin; + private LocalDateTime startTime; + + @Override + public String toString() { + return super.toString(); + } + + public boolean checkOid() { + long oidValue = Long.parseLong(getOid(), 16); + + // 数据类型不在范围内则返回false + bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); + if(BirmmDataBizTypeEnums.toType(bizType) == null) { + return false; + } + interval = (int) ((oidValue >> 11) & 0x7FF); + startMin = (int) (oidValue & 0x7FF); + + int hour = startMin / 60; + int minute = startMin % 60; + + startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); + + return true; + } + + public void setStartDate(String dateStr) { + LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + setStartDate(date); + } + + public void setStartDate(LocalDate date) { + startTime = startTime.withYear(date.getYear()); + startTime = startTime.withMonth(date.getMonthValue()); + startTime = startTime.withDayOfMonth(date.getDayOfMonth()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java new file mode 100644 index 0000000..6df22bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectCountTag extends BirmmBaseTag { + + final String COLLECT_COUNT_TAG_OID = "10000106"; + + // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 + int count; + + @Override + public String toString() { + return super.toString() + "[value: " + count + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + count = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java new file mode 100644 index 0000000..def754c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectIntervalTag extends BirmmBaseTag { + + final String COLLECT_INTERVAL_TAG_OID = "10000105"; + + // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java new file mode 100644 index 0000000..bcb3988 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java @@ -0,0 +1,62 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTimeTag extends BirmmBaseTag { + + final String DATETIME_TAG_OID = "10000051"; + + LocalDateTime dateTime; + + @Override + public String toString() { + return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 + + int year = dateTime.getYear() - 2000; + int month = dateTime.getMonthValue(); + int day = dateTime.getDayOfMonth(); + int hour = dateTime.getHour(); + int minute = dateTime.getMinute(); + int second = dateTime.getSecond(); + + result += String.format("%02x", year); + result += String.format("%02x", month); + result += String.format("%02x", day); + result += String.format("%02x", hour); + result += String.format("%02x", minute); + result += String.format("%02x", second); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + String hexH = valueStr.substring(6, 8); + String hexMin = valueStr.substring(8, 10); + String hexS = valueStr.substring(10, 12); + + dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), + BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); + } +} 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 new file mode 100644 index 0000000..9bb4820 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestIPTag extends BirmmBaseTag { + + final String DESTINATION_IP_TAG_OID = "10000022"; + + String ip; + + @Override + public String toString() { + return super.toString() + "[value: " + ip + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + ip = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java new file mode 100644 index 0000000..a7094dd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -0,0 +1,88 @@ +package com.casic.missiles.frame.tag; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +import com.casic.missiles.frame.tag.config.*; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; +import com.casic.missiles.frame.tag.signal.PCITag; +import com.casic.missiles.frame.tag.signal.RSRPTag; +import com.casic.missiles.frame.tag.signal.SNRTag; + +public class BirmmTagBuilderFactory { + + public static BirmmBaseTag createTagByOid(String oid) { + BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); + if (null != tag) { + switch (tag) { + case RETRY_TIMES_TAG: + return new RetryTimesTag(); + + case DESTINATION_IP_TAG: + return new DestIPTag(); + + case DESTINATION_PORT_TAG: + return new DestPortTag(); + + case DATE_TAG: + return new DateTag(); + + case DATETIME_TAG: + return new DateTimeTag(); + + case UPLOAD_INTERVAL_TAG: + return new UploadIntervalTag(); + + case START_TIME_TAG: + return new StartTimeTag(); + + case COLLECT_INTERVAL_TAG: + return new CollectIntervalTag(); + + case COLLECT_COUNT_TAG: + return new CollectCountTag(); + + case LOWER_LIMIT_TAG: + return new LowerLimitTag(); + + case UPPER_LIMIT_TAG: + return new UpperLimitTag(); + + case SENSOR_STATE_1_TAG: + case SENSOR_STATE_2_TAG: + case SENSOR_STATE_3_TAG: + case SENSOR_STATE_4_TAG: + case SENSOR_STATE_5_TAG: + // 传感器状态 需要根据设备类型单独处理 + return new SensorStateTag(); + + case CELL_TAG: + return new CellTag(); + + case SOFTWARE_VERSION_TAG: + return new SoftwareVersionTag(); + + case PCI_TAG: + return new PCITag(); + + case RSRP_TAG: + return new RSRPTag(); + + case SNR_TAG: + return new SNRTag(); + + default: + return null; + } + } + + // 业务上传报表 + if (oid.startsWith("C")) { + return new UploadTag(); + } + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java new file mode 100644 index 0000000..43dbb41 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java @@ -0,0 +1,25 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CellTag extends BirmmBaseTag { + + final String CELL_TAG_OID = "60000020"; + + int cellVal; + + @Override + public String toString() { + return super.toString() + "[value: " + cellVal + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + cellVal = Integer.parseInt(valueStr, 16); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java new file mode 100644 index 0000000..2514196 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java @@ -0,0 +1,33 @@ +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 java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTag extends BirmmBaseTag { + + final String DATE_TAG_OID = "10000050"; + + LocalDate date; + + @Override + public String toString() { + return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java new file mode 100644 index 0000000..a551cd5 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java @@ -0,0 +1,7 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; + +public class SensorStateTag extends BirmmBaseTag { + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java new file mode 100644 index 0000000..450a755 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadTag extends BirmmBaseTag { + + private int bizType; + private int interval; + private int startMin; + private LocalDateTime startTime; + + @Override + public String toString() { + return super.toString(); + } + + public boolean checkOid() { + long oidValue = Long.parseLong(getOid(), 16); + + // 数据类型不在范围内则返回false + bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); + if(BirmmDataBizTypeEnums.toType(bizType) == null) { + return false; + } + interval = (int) ((oidValue >> 11) & 0x7FF); + startMin = (int) (oidValue & 0x7FF); + + int hour = startMin / 60; + int minute = startMin % 60; + + startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); + + return true; + } + + public void setStartDate(String dateStr) { + LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + setStartDate(date); + } + + public void setStartDate(LocalDate date) { + startTime = startTime.withYear(date.getYear()); + startTime = startTime.withMonth(date.getMonthValue()); + startTime = startTime.withDayOfMonth(date.getDayOfMonth()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java new file mode 100644 index 0000000..6df22bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectCountTag extends BirmmBaseTag { + + final String COLLECT_COUNT_TAG_OID = "10000106"; + + // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 + int count; + + @Override + public String toString() { + return super.toString() + "[value: " + count + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + count = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java new file mode 100644 index 0000000..def754c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectIntervalTag extends BirmmBaseTag { + + final String COLLECT_INTERVAL_TAG_OID = "10000105"; + + // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java new file mode 100644 index 0000000..bcb3988 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java @@ -0,0 +1,62 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTimeTag extends BirmmBaseTag { + + final String DATETIME_TAG_OID = "10000051"; + + LocalDateTime dateTime; + + @Override + public String toString() { + return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 + + int year = dateTime.getYear() - 2000; + int month = dateTime.getMonthValue(); + int day = dateTime.getDayOfMonth(); + int hour = dateTime.getHour(); + int minute = dateTime.getMinute(); + int second = dateTime.getSecond(); + + result += String.format("%02x", year); + result += String.format("%02x", month); + result += String.format("%02x", day); + result += String.format("%02x", hour); + result += String.format("%02x", minute); + result += String.format("%02x", second); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + String hexH = valueStr.substring(6, 8); + String hexMin = valueStr.substring(8, 10); + String hexS = valueStr.substring(10, 12); + + dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), + BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); + } +} 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 new file mode 100644 index 0000000..9bb4820 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestIPTag extends BirmmBaseTag { + + final String DESTINATION_IP_TAG_OID = "10000022"; + + String ip; + + @Override + public String toString() { + return super.toString() + "[value: " + ip + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + ip = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} 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 new file mode 100644 index 0000000..ef29dca --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestPortTag extends BirmmBaseTag { + + final String DESTINATION_PORT_TAG_OID = "10000023"; + + String port; + + @Override + public String toString() { + return super.toString() + "[value: " + port + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + port = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java new file mode 100644 index 0000000..a7094dd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -0,0 +1,88 @@ +package com.casic.missiles.frame.tag; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +import com.casic.missiles.frame.tag.config.*; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; +import com.casic.missiles.frame.tag.signal.PCITag; +import com.casic.missiles.frame.tag.signal.RSRPTag; +import com.casic.missiles.frame.tag.signal.SNRTag; + +public class BirmmTagBuilderFactory { + + public static BirmmBaseTag createTagByOid(String oid) { + BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); + if (null != tag) { + switch (tag) { + case RETRY_TIMES_TAG: + return new RetryTimesTag(); + + case DESTINATION_IP_TAG: + return new DestIPTag(); + + case DESTINATION_PORT_TAG: + return new DestPortTag(); + + case DATE_TAG: + return new DateTag(); + + case DATETIME_TAG: + return new DateTimeTag(); + + case UPLOAD_INTERVAL_TAG: + return new UploadIntervalTag(); + + case START_TIME_TAG: + return new StartTimeTag(); + + case COLLECT_INTERVAL_TAG: + return new CollectIntervalTag(); + + case COLLECT_COUNT_TAG: + return new CollectCountTag(); + + case LOWER_LIMIT_TAG: + return new LowerLimitTag(); + + case UPPER_LIMIT_TAG: + return new UpperLimitTag(); + + case SENSOR_STATE_1_TAG: + case SENSOR_STATE_2_TAG: + case SENSOR_STATE_3_TAG: + case SENSOR_STATE_4_TAG: + case SENSOR_STATE_5_TAG: + // 传感器状态 需要根据设备类型单独处理 + return new SensorStateTag(); + + case CELL_TAG: + return new CellTag(); + + case SOFTWARE_VERSION_TAG: + return new SoftwareVersionTag(); + + case PCI_TAG: + return new PCITag(); + + case RSRP_TAG: + return new RSRPTag(); + + case SNR_TAG: + return new SNRTag(); + + default: + return null; + } + } + + // 业务上传报表 + if (oid.startsWith("C")) { + return new UploadTag(); + } + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java new file mode 100644 index 0000000..43dbb41 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java @@ -0,0 +1,25 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CellTag extends BirmmBaseTag { + + final String CELL_TAG_OID = "60000020"; + + int cellVal; + + @Override + public String toString() { + return super.toString() + "[value: " + cellVal + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + cellVal = Integer.parseInt(valueStr, 16); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java new file mode 100644 index 0000000..2514196 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java @@ -0,0 +1,33 @@ +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 java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTag extends BirmmBaseTag { + + final String DATE_TAG_OID = "10000050"; + + LocalDate date; + + @Override + public String toString() { + return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java new file mode 100644 index 0000000..a551cd5 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java @@ -0,0 +1,7 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; + +public class SensorStateTag extends BirmmBaseTag { + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java new file mode 100644 index 0000000..450a755 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadTag extends BirmmBaseTag { + + private int bizType; + private int interval; + private int startMin; + private LocalDateTime startTime; + + @Override + public String toString() { + return super.toString(); + } + + public boolean checkOid() { + long oidValue = Long.parseLong(getOid(), 16); + + // 数据类型不在范围内则返回false + bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); + if(BirmmDataBizTypeEnums.toType(bizType) == null) { + return false; + } + interval = (int) ((oidValue >> 11) & 0x7FF); + startMin = (int) (oidValue & 0x7FF); + + int hour = startMin / 60; + int minute = startMin % 60; + + startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); + + return true; + } + + public void setStartDate(String dateStr) { + LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + setStartDate(date); + } + + public void setStartDate(LocalDate date) { + startTime = startTime.withYear(date.getYear()); + startTime = startTime.withMonth(date.getMonthValue()); + startTime = startTime.withDayOfMonth(date.getDayOfMonth()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java new file mode 100644 index 0000000..6df22bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectCountTag extends BirmmBaseTag { + + final String COLLECT_COUNT_TAG_OID = "10000106"; + + // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 + int count; + + @Override + public String toString() { + return super.toString() + "[value: " + count + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + count = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java new file mode 100644 index 0000000..def754c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectIntervalTag extends BirmmBaseTag { + + final String COLLECT_INTERVAL_TAG_OID = "10000105"; + + // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java new file mode 100644 index 0000000..bcb3988 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java @@ -0,0 +1,62 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTimeTag extends BirmmBaseTag { + + final String DATETIME_TAG_OID = "10000051"; + + LocalDateTime dateTime; + + @Override + public String toString() { + return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 + + int year = dateTime.getYear() - 2000; + int month = dateTime.getMonthValue(); + int day = dateTime.getDayOfMonth(); + int hour = dateTime.getHour(); + int minute = dateTime.getMinute(); + int second = dateTime.getSecond(); + + result += String.format("%02x", year); + result += String.format("%02x", month); + result += String.format("%02x", day); + result += String.format("%02x", hour); + result += String.format("%02x", minute); + result += String.format("%02x", second); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + String hexH = valueStr.substring(6, 8); + String hexMin = valueStr.substring(8, 10); + String hexS = valueStr.substring(10, 12); + + dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), + BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); + } +} 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 new file mode 100644 index 0000000..9bb4820 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestIPTag extends BirmmBaseTag { + + final String DESTINATION_IP_TAG_OID = "10000022"; + + String ip; + + @Override + public String toString() { + return super.toString() + "[value: " + ip + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + ip = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} 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 new file mode 100644 index 0000000..ef29dca --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestPortTag extends BirmmBaseTag { + + final String DESTINATION_PORT_TAG_OID = "10000023"; + + String port; + + @Override + public String toString() { + return super.toString() + "[value: " + port + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + port = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java new file mode 100644 index 0000000..da05817 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class LowerLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000900"; + + // 单精度浮点数 + float lowerLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + lowerLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java new file mode 100644 index 0000000..a7094dd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -0,0 +1,88 @@ +package com.casic.missiles.frame.tag; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +import com.casic.missiles.frame.tag.config.*; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; +import com.casic.missiles.frame.tag.signal.PCITag; +import com.casic.missiles.frame.tag.signal.RSRPTag; +import com.casic.missiles.frame.tag.signal.SNRTag; + +public class BirmmTagBuilderFactory { + + public static BirmmBaseTag createTagByOid(String oid) { + BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); + if (null != tag) { + switch (tag) { + case RETRY_TIMES_TAG: + return new RetryTimesTag(); + + case DESTINATION_IP_TAG: + return new DestIPTag(); + + case DESTINATION_PORT_TAG: + return new DestPortTag(); + + case DATE_TAG: + return new DateTag(); + + case DATETIME_TAG: + return new DateTimeTag(); + + case UPLOAD_INTERVAL_TAG: + return new UploadIntervalTag(); + + case START_TIME_TAG: + return new StartTimeTag(); + + case COLLECT_INTERVAL_TAG: + return new CollectIntervalTag(); + + case COLLECT_COUNT_TAG: + return new CollectCountTag(); + + case LOWER_LIMIT_TAG: + return new LowerLimitTag(); + + case UPPER_LIMIT_TAG: + return new UpperLimitTag(); + + case SENSOR_STATE_1_TAG: + case SENSOR_STATE_2_TAG: + case SENSOR_STATE_3_TAG: + case SENSOR_STATE_4_TAG: + case SENSOR_STATE_5_TAG: + // 传感器状态 需要根据设备类型单独处理 + return new SensorStateTag(); + + case CELL_TAG: + return new CellTag(); + + case SOFTWARE_VERSION_TAG: + return new SoftwareVersionTag(); + + case PCI_TAG: + return new PCITag(); + + case RSRP_TAG: + return new RSRPTag(); + + case SNR_TAG: + return new SNRTag(); + + default: + return null; + } + } + + // 业务上传报表 + if (oid.startsWith("C")) { + return new UploadTag(); + } + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java new file mode 100644 index 0000000..43dbb41 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java @@ -0,0 +1,25 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CellTag extends BirmmBaseTag { + + final String CELL_TAG_OID = "60000020"; + + int cellVal; + + @Override + public String toString() { + return super.toString() + "[value: " + cellVal + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + cellVal = Integer.parseInt(valueStr, 16); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java new file mode 100644 index 0000000..2514196 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java @@ -0,0 +1,33 @@ +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 java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTag extends BirmmBaseTag { + + final String DATE_TAG_OID = "10000050"; + + LocalDate date; + + @Override + public String toString() { + return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java new file mode 100644 index 0000000..a551cd5 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java @@ -0,0 +1,7 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; + +public class SensorStateTag extends BirmmBaseTag { + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java new file mode 100644 index 0000000..450a755 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadTag extends BirmmBaseTag { + + private int bizType; + private int interval; + private int startMin; + private LocalDateTime startTime; + + @Override + public String toString() { + return super.toString(); + } + + public boolean checkOid() { + long oidValue = Long.parseLong(getOid(), 16); + + // 数据类型不在范围内则返回false + bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); + if(BirmmDataBizTypeEnums.toType(bizType) == null) { + return false; + } + interval = (int) ((oidValue >> 11) & 0x7FF); + startMin = (int) (oidValue & 0x7FF); + + int hour = startMin / 60; + int minute = startMin % 60; + + startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); + + return true; + } + + public void setStartDate(String dateStr) { + LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + setStartDate(date); + } + + public void setStartDate(LocalDate date) { + startTime = startTime.withYear(date.getYear()); + startTime = startTime.withMonth(date.getMonthValue()); + startTime = startTime.withDayOfMonth(date.getDayOfMonth()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java new file mode 100644 index 0000000..6df22bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectCountTag extends BirmmBaseTag { + + final String COLLECT_COUNT_TAG_OID = "10000106"; + + // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 + int count; + + @Override + public String toString() { + return super.toString() + "[value: " + count + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + count = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java new file mode 100644 index 0000000..def754c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectIntervalTag extends BirmmBaseTag { + + final String COLLECT_INTERVAL_TAG_OID = "10000105"; + + // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java new file mode 100644 index 0000000..bcb3988 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java @@ -0,0 +1,62 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTimeTag extends BirmmBaseTag { + + final String DATETIME_TAG_OID = "10000051"; + + LocalDateTime dateTime; + + @Override + public String toString() { + return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 + + int year = dateTime.getYear() - 2000; + int month = dateTime.getMonthValue(); + int day = dateTime.getDayOfMonth(); + int hour = dateTime.getHour(); + int minute = dateTime.getMinute(); + int second = dateTime.getSecond(); + + result += String.format("%02x", year); + result += String.format("%02x", month); + result += String.format("%02x", day); + result += String.format("%02x", hour); + result += String.format("%02x", minute); + result += String.format("%02x", second); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + String hexH = valueStr.substring(6, 8); + String hexMin = valueStr.substring(8, 10); + String hexS = valueStr.substring(10, 12); + + dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), + BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); + } +} 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 new file mode 100644 index 0000000..9bb4820 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestIPTag extends BirmmBaseTag { + + final String DESTINATION_IP_TAG_OID = "10000022"; + + String ip; + + @Override + public String toString() { + return super.toString() + "[value: " + ip + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + ip = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} 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 new file mode 100644 index 0000000..ef29dca --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestPortTag extends BirmmBaseTag { + + final String DESTINATION_PORT_TAG_OID = "10000023"; + + String port; + + @Override + public String toString() { + return super.toString() + "[value: " + port + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + port = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java new file mode 100644 index 0000000..da05817 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class LowerLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000900"; + + // 单精度浮点数 + float lowerLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + lowerLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} 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 new file mode 100644 index 0000000..6d21a35 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RetryTimesTag extends BirmmBaseTag { + + final String RETRY_TIMES_TAG_OID = "1000000A"; + + // TYPE_U8整型,重传次数 1-10 + int times; + + @Override + public String toString() { + return super.toString() + "[value: " + times + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + times = Integer.parseInt(valueStr, 16); + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java new file mode 100644 index 0000000..a7094dd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -0,0 +1,88 @@ +package com.casic.missiles.frame.tag; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +import com.casic.missiles.frame.tag.config.*; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; +import com.casic.missiles.frame.tag.signal.PCITag; +import com.casic.missiles.frame.tag.signal.RSRPTag; +import com.casic.missiles.frame.tag.signal.SNRTag; + +public class BirmmTagBuilderFactory { + + public static BirmmBaseTag createTagByOid(String oid) { + BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); + if (null != tag) { + switch (tag) { + case RETRY_TIMES_TAG: + return new RetryTimesTag(); + + case DESTINATION_IP_TAG: + return new DestIPTag(); + + case DESTINATION_PORT_TAG: + return new DestPortTag(); + + case DATE_TAG: + return new DateTag(); + + case DATETIME_TAG: + return new DateTimeTag(); + + case UPLOAD_INTERVAL_TAG: + return new UploadIntervalTag(); + + case START_TIME_TAG: + return new StartTimeTag(); + + case COLLECT_INTERVAL_TAG: + return new CollectIntervalTag(); + + case COLLECT_COUNT_TAG: + return new CollectCountTag(); + + case LOWER_LIMIT_TAG: + return new LowerLimitTag(); + + case UPPER_LIMIT_TAG: + return new UpperLimitTag(); + + case SENSOR_STATE_1_TAG: + case SENSOR_STATE_2_TAG: + case SENSOR_STATE_3_TAG: + case SENSOR_STATE_4_TAG: + case SENSOR_STATE_5_TAG: + // 传感器状态 需要根据设备类型单独处理 + return new SensorStateTag(); + + case CELL_TAG: + return new CellTag(); + + case SOFTWARE_VERSION_TAG: + return new SoftwareVersionTag(); + + case PCI_TAG: + return new PCITag(); + + case RSRP_TAG: + return new RSRPTag(); + + case SNR_TAG: + return new SNRTag(); + + default: + return null; + } + } + + // 业务上传报表 + if (oid.startsWith("C")) { + return new UploadTag(); + } + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java new file mode 100644 index 0000000..43dbb41 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java @@ -0,0 +1,25 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CellTag extends BirmmBaseTag { + + final String CELL_TAG_OID = "60000020"; + + int cellVal; + + @Override + public String toString() { + return super.toString() + "[value: " + cellVal + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + cellVal = Integer.parseInt(valueStr, 16); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java new file mode 100644 index 0000000..2514196 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java @@ -0,0 +1,33 @@ +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 java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTag extends BirmmBaseTag { + + final String DATE_TAG_OID = "10000050"; + + LocalDate date; + + @Override + public String toString() { + return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java new file mode 100644 index 0000000..a551cd5 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java @@ -0,0 +1,7 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; + +public class SensorStateTag extends BirmmBaseTag { + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java new file mode 100644 index 0000000..450a755 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadTag extends BirmmBaseTag { + + private int bizType; + private int interval; + private int startMin; + private LocalDateTime startTime; + + @Override + public String toString() { + return super.toString(); + } + + public boolean checkOid() { + long oidValue = Long.parseLong(getOid(), 16); + + // 数据类型不在范围内则返回false + bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); + if(BirmmDataBizTypeEnums.toType(bizType) == null) { + return false; + } + interval = (int) ((oidValue >> 11) & 0x7FF); + startMin = (int) (oidValue & 0x7FF); + + int hour = startMin / 60; + int minute = startMin % 60; + + startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); + + return true; + } + + public void setStartDate(String dateStr) { + LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + setStartDate(date); + } + + public void setStartDate(LocalDate date) { + startTime = startTime.withYear(date.getYear()); + startTime = startTime.withMonth(date.getMonthValue()); + startTime = startTime.withDayOfMonth(date.getDayOfMonth()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java new file mode 100644 index 0000000..6df22bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectCountTag extends BirmmBaseTag { + + final String COLLECT_COUNT_TAG_OID = "10000106"; + + // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 + int count; + + @Override + public String toString() { + return super.toString() + "[value: " + count + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + count = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java new file mode 100644 index 0000000..def754c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectIntervalTag extends BirmmBaseTag { + + final String COLLECT_INTERVAL_TAG_OID = "10000105"; + + // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java new file mode 100644 index 0000000..bcb3988 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java @@ -0,0 +1,62 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTimeTag extends BirmmBaseTag { + + final String DATETIME_TAG_OID = "10000051"; + + LocalDateTime dateTime; + + @Override + public String toString() { + return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 + + int year = dateTime.getYear() - 2000; + int month = dateTime.getMonthValue(); + int day = dateTime.getDayOfMonth(); + int hour = dateTime.getHour(); + int minute = dateTime.getMinute(); + int second = dateTime.getSecond(); + + result += String.format("%02x", year); + result += String.format("%02x", month); + result += String.format("%02x", day); + result += String.format("%02x", hour); + result += String.format("%02x", minute); + result += String.format("%02x", second); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + String hexH = valueStr.substring(6, 8); + String hexMin = valueStr.substring(8, 10); + String hexS = valueStr.substring(10, 12); + + dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), + BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); + } +} 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 new file mode 100644 index 0000000..9bb4820 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestIPTag extends BirmmBaseTag { + + final String DESTINATION_IP_TAG_OID = "10000022"; + + String ip; + + @Override + public String toString() { + return super.toString() + "[value: " + ip + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + ip = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} 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 new file mode 100644 index 0000000..ef29dca --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestPortTag extends BirmmBaseTag { + + final String DESTINATION_PORT_TAG_OID = "10000023"; + + String port; + + @Override + public String toString() { + return super.toString() + "[value: " + port + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + port = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java new file mode 100644 index 0000000..da05817 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class LowerLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000900"; + + // 单精度浮点数 + float lowerLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + lowerLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} 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 new file mode 100644 index 0000000..6d21a35 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RetryTimesTag extends BirmmBaseTag { + + final String RETRY_TIMES_TAG_OID = "1000000A"; + + // TYPE_U8整型,重传次数 1-10 + int times; + + @Override + public String toString() { + return super.toString() + "[value: " + times + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + times = Integer.parseInt(valueStr, 16); + } +} 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 new file mode 100644 index 0000000..925d162 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class StartTimeTag extends BirmmBaseTag { + + final String START_TIME_TAG_OID = "10000104"; + + // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 + int startMinute; + + @Override + public String toString() { + return super.toString() + "[value: " + startMinute + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + startMinute = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java new file mode 100644 index 0000000..a7094dd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -0,0 +1,88 @@ +package com.casic.missiles.frame.tag; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +import com.casic.missiles.frame.tag.config.*; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; +import com.casic.missiles.frame.tag.signal.PCITag; +import com.casic.missiles.frame.tag.signal.RSRPTag; +import com.casic.missiles.frame.tag.signal.SNRTag; + +public class BirmmTagBuilderFactory { + + public static BirmmBaseTag createTagByOid(String oid) { + BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); + if (null != tag) { + switch (tag) { + case RETRY_TIMES_TAG: + return new RetryTimesTag(); + + case DESTINATION_IP_TAG: + return new DestIPTag(); + + case DESTINATION_PORT_TAG: + return new DestPortTag(); + + case DATE_TAG: + return new DateTag(); + + case DATETIME_TAG: + return new DateTimeTag(); + + case UPLOAD_INTERVAL_TAG: + return new UploadIntervalTag(); + + case START_TIME_TAG: + return new StartTimeTag(); + + case COLLECT_INTERVAL_TAG: + return new CollectIntervalTag(); + + case COLLECT_COUNT_TAG: + return new CollectCountTag(); + + case LOWER_LIMIT_TAG: + return new LowerLimitTag(); + + case UPPER_LIMIT_TAG: + return new UpperLimitTag(); + + case SENSOR_STATE_1_TAG: + case SENSOR_STATE_2_TAG: + case SENSOR_STATE_3_TAG: + case SENSOR_STATE_4_TAG: + case SENSOR_STATE_5_TAG: + // 传感器状态 需要根据设备类型单独处理 + return new SensorStateTag(); + + case CELL_TAG: + return new CellTag(); + + case SOFTWARE_VERSION_TAG: + return new SoftwareVersionTag(); + + case PCI_TAG: + return new PCITag(); + + case RSRP_TAG: + return new RSRPTag(); + + case SNR_TAG: + return new SNRTag(); + + default: + return null; + } + } + + // 业务上传报表 + if (oid.startsWith("C")) { + return new UploadTag(); + } + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java new file mode 100644 index 0000000..43dbb41 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java @@ -0,0 +1,25 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CellTag extends BirmmBaseTag { + + final String CELL_TAG_OID = "60000020"; + + int cellVal; + + @Override + public String toString() { + return super.toString() + "[value: " + cellVal + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + cellVal = Integer.parseInt(valueStr, 16); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java new file mode 100644 index 0000000..2514196 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java @@ -0,0 +1,33 @@ +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 java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTag extends BirmmBaseTag { + + final String DATE_TAG_OID = "10000050"; + + LocalDate date; + + @Override + public String toString() { + return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java new file mode 100644 index 0000000..a551cd5 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java @@ -0,0 +1,7 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; + +public class SensorStateTag extends BirmmBaseTag { + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java new file mode 100644 index 0000000..450a755 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadTag extends BirmmBaseTag { + + private int bizType; + private int interval; + private int startMin; + private LocalDateTime startTime; + + @Override + public String toString() { + return super.toString(); + } + + public boolean checkOid() { + long oidValue = Long.parseLong(getOid(), 16); + + // 数据类型不在范围内则返回false + bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); + if(BirmmDataBizTypeEnums.toType(bizType) == null) { + return false; + } + interval = (int) ((oidValue >> 11) & 0x7FF); + startMin = (int) (oidValue & 0x7FF); + + int hour = startMin / 60; + int minute = startMin % 60; + + startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); + + return true; + } + + public void setStartDate(String dateStr) { + LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + setStartDate(date); + } + + public void setStartDate(LocalDate date) { + startTime = startTime.withYear(date.getYear()); + startTime = startTime.withMonth(date.getMonthValue()); + startTime = startTime.withDayOfMonth(date.getDayOfMonth()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java new file mode 100644 index 0000000..6df22bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectCountTag extends BirmmBaseTag { + + final String COLLECT_COUNT_TAG_OID = "10000106"; + + // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 + int count; + + @Override + public String toString() { + return super.toString() + "[value: " + count + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + count = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java new file mode 100644 index 0000000..def754c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectIntervalTag extends BirmmBaseTag { + + final String COLLECT_INTERVAL_TAG_OID = "10000105"; + + // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java new file mode 100644 index 0000000..bcb3988 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java @@ -0,0 +1,62 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTimeTag extends BirmmBaseTag { + + final String DATETIME_TAG_OID = "10000051"; + + LocalDateTime dateTime; + + @Override + public String toString() { + return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 + + int year = dateTime.getYear() - 2000; + int month = dateTime.getMonthValue(); + int day = dateTime.getDayOfMonth(); + int hour = dateTime.getHour(); + int minute = dateTime.getMinute(); + int second = dateTime.getSecond(); + + result += String.format("%02x", year); + result += String.format("%02x", month); + result += String.format("%02x", day); + result += String.format("%02x", hour); + result += String.format("%02x", minute); + result += String.format("%02x", second); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + String hexH = valueStr.substring(6, 8); + String hexMin = valueStr.substring(8, 10); + String hexS = valueStr.substring(10, 12); + + dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), + BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); + } +} 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 new file mode 100644 index 0000000..9bb4820 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestIPTag extends BirmmBaseTag { + + final String DESTINATION_IP_TAG_OID = "10000022"; + + String ip; + + @Override + public String toString() { + return super.toString() + "[value: " + ip + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + ip = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} 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 new file mode 100644 index 0000000..ef29dca --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestPortTag extends BirmmBaseTag { + + final String DESTINATION_PORT_TAG_OID = "10000023"; + + String port; + + @Override + public String toString() { + return super.toString() + "[value: " + port + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + port = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java new file mode 100644 index 0000000..da05817 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class LowerLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000900"; + + // 单精度浮点数 + float lowerLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + lowerLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} 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 new file mode 100644 index 0000000..6d21a35 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RetryTimesTag extends BirmmBaseTag { + + final String RETRY_TIMES_TAG_OID = "1000000A"; + + // TYPE_U8整型,重传次数 1-10 + int times; + + @Override + public String toString() { + return super.toString() + "[value: " + times + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + times = Integer.parseInt(valueStr, 16); + } +} 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 new file mode 100644 index 0000000..925d162 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class StartTimeTag extends BirmmBaseTag { + + final String START_TIME_TAG_OID = "10000104"; + + // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 + int startMinute; + + @Override + public String toString() { + return super.toString() + "[value: " + startMinute + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + startMinute = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java new file mode 100644 index 0000000..f2392ee --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadIntervalTag extends BirmmBaseTag { + + final String UPLOAD_INTERVAL_TAG_OID = "10000062"; + + // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java new file mode 100644 index 0000000..a7094dd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -0,0 +1,88 @@ +package com.casic.missiles.frame.tag; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +import com.casic.missiles.frame.tag.config.*; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; +import com.casic.missiles.frame.tag.signal.PCITag; +import com.casic.missiles.frame.tag.signal.RSRPTag; +import com.casic.missiles.frame.tag.signal.SNRTag; + +public class BirmmTagBuilderFactory { + + public static BirmmBaseTag createTagByOid(String oid) { + BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); + if (null != tag) { + switch (tag) { + case RETRY_TIMES_TAG: + return new RetryTimesTag(); + + case DESTINATION_IP_TAG: + return new DestIPTag(); + + case DESTINATION_PORT_TAG: + return new DestPortTag(); + + case DATE_TAG: + return new DateTag(); + + case DATETIME_TAG: + return new DateTimeTag(); + + case UPLOAD_INTERVAL_TAG: + return new UploadIntervalTag(); + + case START_TIME_TAG: + return new StartTimeTag(); + + case COLLECT_INTERVAL_TAG: + return new CollectIntervalTag(); + + case COLLECT_COUNT_TAG: + return new CollectCountTag(); + + case LOWER_LIMIT_TAG: + return new LowerLimitTag(); + + case UPPER_LIMIT_TAG: + return new UpperLimitTag(); + + case SENSOR_STATE_1_TAG: + case SENSOR_STATE_2_TAG: + case SENSOR_STATE_3_TAG: + case SENSOR_STATE_4_TAG: + case SENSOR_STATE_5_TAG: + // 传感器状态 需要根据设备类型单独处理 + return new SensorStateTag(); + + case CELL_TAG: + return new CellTag(); + + case SOFTWARE_VERSION_TAG: + return new SoftwareVersionTag(); + + case PCI_TAG: + return new PCITag(); + + case RSRP_TAG: + return new RSRPTag(); + + case SNR_TAG: + return new SNRTag(); + + default: + return null; + } + } + + // 业务上传报表 + if (oid.startsWith("C")) { + return new UploadTag(); + } + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java new file mode 100644 index 0000000..43dbb41 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java @@ -0,0 +1,25 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CellTag extends BirmmBaseTag { + + final String CELL_TAG_OID = "60000020"; + + int cellVal; + + @Override + public String toString() { + return super.toString() + "[value: " + cellVal + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + cellVal = Integer.parseInt(valueStr, 16); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java new file mode 100644 index 0000000..2514196 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java @@ -0,0 +1,33 @@ +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 java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTag extends BirmmBaseTag { + + final String DATE_TAG_OID = "10000050"; + + LocalDate date; + + @Override + public String toString() { + return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java new file mode 100644 index 0000000..a551cd5 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java @@ -0,0 +1,7 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; + +public class SensorStateTag extends BirmmBaseTag { + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java new file mode 100644 index 0000000..450a755 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadTag extends BirmmBaseTag { + + private int bizType; + private int interval; + private int startMin; + private LocalDateTime startTime; + + @Override + public String toString() { + return super.toString(); + } + + public boolean checkOid() { + long oidValue = Long.parseLong(getOid(), 16); + + // 数据类型不在范围内则返回false + bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); + if(BirmmDataBizTypeEnums.toType(bizType) == null) { + return false; + } + interval = (int) ((oidValue >> 11) & 0x7FF); + startMin = (int) (oidValue & 0x7FF); + + int hour = startMin / 60; + int minute = startMin % 60; + + startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); + + return true; + } + + public void setStartDate(String dateStr) { + LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + setStartDate(date); + } + + public void setStartDate(LocalDate date) { + startTime = startTime.withYear(date.getYear()); + startTime = startTime.withMonth(date.getMonthValue()); + startTime = startTime.withDayOfMonth(date.getDayOfMonth()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java new file mode 100644 index 0000000..6df22bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectCountTag extends BirmmBaseTag { + + final String COLLECT_COUNT_TAG_OID = "10000106"; + + // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 + int count; + + @Override + public String toString() { + return super.toString() + "[value: " + count + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + count = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java new file mode 100644 index 0000000..def754c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectIntervalTag extends BirmmBaseTag { + + final String COLLECT_INTERVAL_TAG_OID = "10000105"; + + // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java new file mode 100644 index 0000000..bcb3988 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java @@ -0,0 +1,62 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTimeTag extends BirmmBaseTag { + + final String DATETIME_TAG_OID = "10000051"; + + LocalDateTime dateTime; + + @Override + public String toString() { + return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 + + int year = dateTime.getYear() - 2000; + int month = dateTime.getMonthValue(); + int day = dateTime.getDayOfMonth(); + int hour = dateTime.getHour(); + int minute = dateTime.getMinute(); + int second = dateTime.getSecond(); + + result += String.format("%02x", year); + result += String.format("%02x", month); + result += String.format("%02x", day); + result += String.format("%02x", hour); + result += String.format("%02x", minute); + result += String.format("%02x", second); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + String hexH = valueStr.substring(6, 8); + String hexMin = valueStr.substring(8, 10); + String hexS = valueStr.substring(10, 12); + + dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), + BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); + } +} 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 new file mode 100644 index 0000000..9bb4820 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestIPTag extends BirmmBaseTag { + + final String DESTINATION_IP_TAG_OID = "10000022"; + + String ip; + + @Override + public String toString() { + return super.toString() + "[value: " + ip + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + ip = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} 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 new file mode 100644 index 0000000..ef29dca --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestPortTag extends BirmmBaseTag { + + final String DESTINATION_PORT_TAG_OID = "10000023"; + + String port; + + @Override + public String toString() { + return super.toString() + "[value: " + port + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + port = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java new file mode 100644 index 0000000..da05817 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class LowerLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000900"; + + // 单精度浮点数 + float lowerLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + lowerLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} 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 new file mode 100644 index 0000000..6d21a35 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RetryTimesTag extends BirmmBaseTag { + + final String RETRY_TIMES_TAG_OID = "1000000A"; + + // TYPE_U8整型,重传次数 1-10 + int times; + + @Override + public String toString() { + return super.toString() + "[value: " + times + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + times = Integer.parseInt(valueStr, 16); + } +} 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 new file mode 100644 index 0000000..925d162 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class StartTimeTag extends BirmmBaseTag { + + final String START_TIME_TAG_OID = "10000104"; + + // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 + int startMinute; + + @Override + public String toString() { + return super.toString() + "[value: " + startMinute + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + startMinute = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java new file mode 100644 index 0000000..f2392ee --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadIntervalTag extends BirmmBaseTag { + + final String UPLOAD_INTERVAL_TAG_OID = "10000062"; + + // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java new file mode 100644 index 0000000..a0bbe7d --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UpperLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000901"; + + // 单精度浮点数 + float upperLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + upperLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java new file mode 100644 index 0000000..a7094dd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -0,0 +1,88 @@ +package com.casic.missiles.frame.tag; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +import com.casic.missiles.frame.tag.config.*; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; +import com.casic.missiles.frame.tag.signal.PCITag; +import com.casic.missiles.frame.tag.signal.RSRPTag; +import com.casic.missiles.frame.tag.signal.SNRTag; + +public class BirmmTagBuilderFactory { + + public static BirmmBaseTag createTagByOid(String oid) { + BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); + if (null != tag) { + switch (tag) { + case RETRY_TIMES_TAG: + return new RetryTimesTag(); + + case DESTINATION_IP_TAG: + return new DestIPTag(); + + case DESTINATION_PORT_TAG: + return new DestPortTag(); + + case DATE_TAG: + return new DateTag(); + + case DATETIME_TAG: + return new DateTimeTag(); + + case UPLOAD_INTERVAL_TAG: + return new UploadIntervalTag(); + + case START_TIME_TAG: + return new StartTimeTag(); + + case COLLECT_INTERVAL_TAG: + return new CollectIntervalTag(); + + case COLLECT_COUNT_TAG: + return new CollectCountTag(); + + case LOWER_LIMIT_TAG: + return new LowerLimitTag(); + + case UPPER_LIMIT_TAG: + return new UpperLimitTag(); + + case SENSOR_STATE_1_TAG: + case SENSOR_STATE_2_TAG: + case SENSOR_STATE_3_TAG: + case SENSOR_STATE_4_TAG: + case SENSOR_STATE_5_TAG: + // 传感器状态 需要根据设备类型单独处理 + return new SensorStateTag(); + + case CELL_TAG: + return new CellTag(); + + case SOFTWARE_VERSION_TAG: + return new SoftwareVersionTag(); + + case PCI_TAG: + return new PCITag(); + + case RSRP_TAG: + return new RSRPTag(); + + case SNR_TAG: + return new SNRTag(); + + default: + return null; + } + } + + // 业务上传报表 + if (oid.startsWith("C")) { + return new UploadTag(); + } + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java new file mode 100644 index 0000000..43dbb41 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java @@ -0,0 +1,25 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CellTag extends BirmmBaseTag { + + final String CELL_TAG_OID = "60000020"; + + int cellVal; + + @Override + public String toString() { + return super.toString() + "[value: " + cellVal + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + cellVal = Integer.parseInt(valueStr, 16); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java new file mode 100644 index 0000000..2514196 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java @@ -0,0 +1,33 @@ +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 java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTag extends BirmmBaseTag { + + final String DATE_TAG_OID = "10000050"; + + LocalDate date; + + @Override + public String toString() { + return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java new file mode 100644 index 0000000..a551cd5 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java @@ -0,0 +1,7 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; + +public class SensorStateTag extends BirmmBaseTag { + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java new file mode 100644 index 0000000..450a755 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadTag extends BirmmBaseTag { + + private int bizType; + private int interval; + private int startMin; + private LocalDateTime startTime; + + @Override + public String toString() { + return super.toString(); + } + + public boolean checkOid() { + long oidValue = Long.parseLong(getOid(), 16); + + // 数据类型不在范围内则返回false + bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); + if(BirmmDataBizTypeEnums.toType(bizType) == null) { + return false; + } + interval = (int) ((oidValue >> 11) & 0x7FF); + startMin = (int) (oidValue & 0x7FF); + + int hour = startMin / 60; + int minute = startMin % 60; + + startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); + + return true; + } + + public void setStartDate(String dateStr) { + LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + setStartDate(date); + } + + public void setStartDate(LocalDate date) { + startTime = startTime.withYear(date.getYear()); + startTime = startTime.withMonth(date.getMonthValue()); + startTime = startTime.withDayOfMonth(date.getDayOfMonth()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java new file mode 100644 index 0000000..6df22bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectCountTag extends BirmmBaseTag { + + final String COLLECT_COUNT_TAG_OID = "10000106"; + + // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 + int count; + + @Override + public String toString() { + return super.toString() + "[value: " + count + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + count = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java new file mode 100644 index 0000000..def754c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectIntervalTag extends BirmmBaseTag { + + final String COLLECT_INTERVAL_TAG_OID = "10000105"; + + // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java new file mode 100644 index 0000000..bcb3988 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java @@ -0,0 +1,62 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTimeTag extends BirmmBaseTag { + + final String DATETIME_TAG_OID = "10000051"; + + LocalDateTime dateTime; + + @Override + public String toString() { + return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 + + int year = dateTime.getYear() - 2000; + int month = dateTime.getMonthValue(); + int day = dateTime.getDayOfMonth(); + int hour = dateTime.getHour(); + int minute = dateTime.getMinute(); + int second = dateTime.getSecond(); + + result += String.format("%02x", year); + result += String.format("%02x", month); + result += String.format("%02x", day); + result += String.format("%02x", hour); + result += String.format("%02x", minute); + result += String.format("%02x", second); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + String hexH = valueStr.substring(6, 8); + String hexMin = valueStr.substring(8, 10); + String hexS = valueStr.substring(10, 12); + + dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), + BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); + } +} 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 new file mode 100644 index 0000000..9bb4820 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestIPTag extends BirmmBaseTag { + + final String DESTINATION_IP_TAG_OID = "10000022"; + + String ip; + + @Override + public String toString() { + return super.toString() + "[value: " + ip + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + ip = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} 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 new file mode 100644 index 0000000..ef29dca --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestPortTag extends BirmmBaseTag { + + final String DESTINATION_PORT_TAG_OID = "10000023"; + + String port; + + @Override + public String toString() { + return super.toString() + "[value: " + port + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + port = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java new file mode 100644 index 0000000..da05817 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class LowerLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000900"; + + // 单精度浮点数 + float lowerLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + lowerLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} 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 new file mode 100644 index 0000000..6d21a35 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RetryTimesTag extends BirmmBaseTag { + + final String RETRY_TIMES_TAG_OID = "1000000A"; + + // TYPE_U8整型,重传次数 1-10 + int times; + + @Override + public String toString() { + return super.toString() + "[value: " + times + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + times = Integer.parseInt(valueStr, 16); + } +} 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 new file mode 100644 index 0000000..925d162 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class StartTimeTag extends BirmmBaseTag { + + final String START_TIME_TAG_OID = "10000104"; + + // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 + int startMinute; + + @Override + public String toString() { + return super.toString() + "[value: " + startMinute + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + startMinute = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java new file mode 100644 index 0000000..f2392ee --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadIntervalTag extends BirmmBaseTag { + + final String UPLOAD_INTERVAL_TAG_OID = "10000062"; + + // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java new file mode 100644 index 0000000..a0bbe7d --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UpperLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000901"; + + // 单精度浮点数 + float upperLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + upperLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java new file mode 100644 index 0000000..9daab43 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class NeedOTATag extends BirmmBaseTag { + + final String NEED_OTA_TAG_OID = "60000600"; + + boolean need; + + @Override + public String toString() { + return super.toString() + "[value: " + need + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + need = Boolean.parseBoolean(valueStr); + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java new file mode 100644 index 0000000..a7094dd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -0,0 +1,88 @@ +package com.casic.missiles.frame.tag; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +import com.casic.missiles.frame.tag.config.*; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; +import com.casic.missiles.frame.tag.signal.PCITag; +import com.casic.missiles.frame.tag.signal.RSRPTag; +import com.casic.missiles.frame.tag.signal.SNRTag; + +public class BirmmTagBuilderFactory { + + public static BirmmBaseTag createTagByOid(String oid) { + BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); + if (null != tag) { + switch (tag) { + case RETRY_TIMES_TAG: + return new RetryTimesTag(); + + case DESTINATION_IP_TAG: + return new DestIPTag(); + + case DESTINATION_PORT_TAG: + return new DestPortTag(); + + case DATE_TAG: + return new DateTag(); + + case DATETIME_TAG: + return new DateTimeTag(); + + case UPLOAD_INTERVAL_TAG: + return new UploadIntervalTag(); + + case START_TIME_TAG: + return new StartTimeTag(); + + case COLLECT_INTERVAL_TAG: + return new CollectIntervalTag(); + + case COLLECT_COUNT_TAG: + return new CollectCountTag(); + + case LOWER_LIMIT_TAG: + return new LowerLimitTag(); + + case UPPER_LIMIT_TAG: + return new UpperLimitTag(); + + case SENSOR_STATE_1_TAG: + case SENSOR_STATE_2_TAG: + case SENSOR_STATE_3_TAG: + case SENSOR_STATE_4_TAG: + case SENSOR_STATE_5_TAG: + // 传感器状态 需要根据设备类型单独处理 + return new SensorStateTag(); + + case CELL_TAG: + return new CellTag(); + + case SOFTWARE_VERSION_TAG: + return new SoftwareVersionTag(); + + case PCI_TAG: + return new PCITag(); + + case RSRP_TAG: + return new RSRPTag(); + + case SNR_TAG: + return new SNRTag(); + + default: + return null; + } + } + + // 业务上传报表 + if (oid.startsWith("C")) { + return new UploadTag(); + } + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java new file mode 100644 index 0000000..43dbb41 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java @@ -0,0 +1,25 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CellTag extends BirmmBaseTag { + + final String CELL_TAG_OID = "60000020"; + + int cellVal; + + @Override + public String toString() { + return super.toString() + "[value: " + cellVal + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + cellVal = Integer.parseInt(valueStr, 16); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java new file mode 100644 index 0000000..2514196 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java @@ -0,0 +1,33 @@ +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 java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTag extends BirmmBaseTag { + + final String DATE_TAG_OID = "10000050"; + + LocalDate date; + + @Override + public String toString() { + return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java new file mode 100644 index 0000000..a551cd5 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java @@ -0,0 +1,7 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; + +public class SensorStateTag extends BirmmBaseTag { + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java new file mode 100644 index 0000000..450a755 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadTag extends BirmmBaseTag { + + private int bizType; + private int interval; + private int startMin; + private LocalDateTime startTime; + + @Override + public String toString() { + return super.toString(); + } + + public boolean checkOid() { + long oidValue = Long.parseLong(getOid(), 16); + + // 数据类型不在范围内则返回false + bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); + if(BirmmDataBizTypeEnums.toType(bizType) == null) { + return false; + } + interval = (int) ((oidValue >> 11) & 0x7FF); + startMin = (int) (oidValue & 0x7FF); + + int hour = startMin / 60; + int minute = startMin % 60; + + startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); + + return true; + } + + public void setStartDate(String dateStr) { + LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + setStartDate(date); + } + + public void setStartDate(LocalDate date) { + startTime = startTime.withYear(date.getYear()); + startTime = startTime.withMonth(date.getMonthValue()); + startTime = startTime.withDayOfMonth(date.getDayOfMonth()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java new file mode 100644 index 0000000..6df22bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectCountTag extends BirmmBaseTag { + + final String COLLECT_COUNT_TAG_OID = "10000106"; + + // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 + int count; + + @Override + public String toString() { + return super.toString() + "[value: " + count + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + count = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java new file mode 100644 index 0000000..def754c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectIntervalTag extends BirmmBaseTag { + + final String COLLECT_INTERVAL_TAG_OID = "10000105"; + + // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java new file mode 100644 index 0000000..bcb3988 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java @@ -0,0 +1,62 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTimeTag extends BirmmBaseTag { + + final String DATETIME_TAG_OID = "10000051"; + + LocalDateTime dateTime; + + @Override + public String toString() { + return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 + + int year = dateTime.getYear() - 2000; + int month = dateTime.getMonthValue(); + int day = dateTime.getDayOfMonth(); + int hour = dateTime.getHour(); + int minute = dateTime.getMinute(); + int second = dateTime.getSecond(); + + result += String.format("%02x", year); + result += String.format("%02x", month); + result += String.format("%02x", day); + result += String.format("%02x", hour); + result += String.format("%02x", minute); + result += String.format("%02x", second); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + String hexH = valueStr.substring(6, 8); + String hexMin = valueStr.substring(8, 10); + String hexS = valueStr.substring(10, 12); + + dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), + BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); + } +} 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 new file mode 100644 index 0000000..9bb4820 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestIPTag extends BirmmBaseTag { + + final String DESTINATION_IP_TAG_OID = "10000022"; + + String ip; + + @Override + public String toString() { + return super.toString() + "[value: " + ip + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + ip = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} 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 new file mode 100644 index 0000000..ef29dca --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestPortTag extends BirmmBaseTag { + + final String DESTINATION_PORT_TAG_OID = "10000023"; + + String port; + + @Override + public String toString() { + return super.toString() + "[value: " + port + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + port = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java new file mode 100644 index 0000000..da05817 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class LowerLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000900"; + + // 单精度浮点数 + float lowerLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + lowerLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} 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 new file mode 100644 index 0000000..6d21a35 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RetryTimesTag extends BirmmBaseTag { + + final String RETRY_TIMES_TAG_OID = "1000000A"; + + // TYPE_U8整型,重传次数 1-10 + int times; + + @Override + public String toString() { + return super.toString() + "[value: " + times + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + times = Integer.parseInt(valueStr, 16); + } +} 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 new file mode 100644 index 0000000..925d162 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class StartTimeTag extends BirmmBaseTag { + + final String START_TIME_TAG_OID = "10000104"; + + // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 + int startMinute; + + @Override + public String toString() { + return super.toString() + "[value: " + startMinute + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + startMinute = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java new file mode 100644 index 0000000..f2392ee --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadIntervalTag extends BirmmBaseTag { + + final String UPLOAD_INTERVAL_TAG_OID = "10000062"; + + // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java new file mode 100644 index 0000000..a0bbe7d --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UpperLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000901"; + + // 单精度浮点数 + float upperLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + upperLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java new file mode 100644 index 0000000..9daab43 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class NeedOTATag extends BirmmBaseTag { + + final String NEED_OTA_TAG_OID = "60000600"; + + boolean need; + + @Override + public String toString() { + return super.toString() + "[value: " + need + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + need = Boolean.parseBoolean(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java new file mode 100644 index 0000000..0056fb8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageCRCTag extends BirmmBaseTag { + + final String PACKAGE_CRC_TAG_OID = "60000603"; + + String packCRC; + + @Override + public String toString() { + return super.toString() + "[value: " + packCRC + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + packCRC = valueStr; + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java new file mode 100644 index 0000000..a7094dd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -0,0 +1,88 @@ +package com.casic.missiles.frame.tag; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +import com.casic.missiles.frame.tag.config.*; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; +import com.casic.missiles.frame.tag.signal.PCITag; +import com.casic.missiles.frame.tag.signal.RSRPTag; +import com.casic.missiles.frame.tag.signal.SNRTag; + +public class BirmmTagBuilderFactory { + + public static BirmmBaseTag createTagByOid(String oid) { + BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); + if (null != tag) { + switch (tag) { + case RETRY_TIMES_TAG: + return new RetryTimesTag(); + + case DESTINATION_IP_TAG: + return new DestIPTag(); + + case DESTINATION_PORT_TAG: + return new DestPortTag(); + + case DATE_TAG: + return new DateTag(); + + case DATETIME_TAG: + return new DateTimeTag(); + + case UPLOAD_INTERVAL_TAG: + return new UploadIntervalTag(); + + case START_TIME_TAG: + return new StartTimeTag(); + + case COLLECT_INTERVAL_TAG: + return new CollectIntervalTag(); + + case COLLECT_COUNT_TAG: + return new CollectCountTag(); + + case LOWER_LIMIT_TAG: + return new LowerLimitTag(); + + case UPPER_LIMIT_TAG: + return new UpperLimitTag(); + + case SENSOR_STATE_1_TAG: + case SENSOR_STATE_2_TAG: + case SENSOR_STATE_3_TAG: + case SENSOR_STATE_4_TAG: + case SENSOR_STATE_5_TAG: + // 传感器状态 需要根据设备类型单独处理 + return new SensorStateTag(); + + case CELL_TAG: + return new CellTag(); + + case SOFTWARE_VERSION_TAG: + return new SoftwareVersionTag(); + + case PCI_TAG: + return new PCITag(); + + case RSRP_TAG: + return new RSRPTag(); + + case SNR_TAG: + return new SNRTag(); + + default: + return null; + } + } + + // 业务上传报表 + if (oid.startsWith("C")) { + return new UploadTag(); + } + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java new file mode 100644 index 0000000..43dbb41 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java @@ -0,0 +1,25 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CellTag extends BirmmBaseTag { + + final String CELL_TAG_OID = "60000020"; + + int cellVal; + + @Override + public String toString() { + return super.toString() + "[value: " + cellVal + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + cellVal = Integer.parseInt(valueStr, 16); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java new file mode 100644 index 0000000..2514196 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java @@ -0,0 +1,33 @@ +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 java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTag extends BirmmBaseTag { + + final String DATE_TAG_OID = "10000050"; + + LocalDate date; + + @Override + public String toString() { + return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java new file mode 100644 index 0000000..a551cd5 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java @@ -0,0 +1,7 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; + +public class SensorStateTag extends BirmmBaseTag { + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java new file mode 100644 index 0000000..450a755 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadTag extends BirmmBaseTag { + + private int bizType; + private int interval; + private int startMin; + private LocalDateTime startTime; + + @Override + public String toString() { + return super.toString(); + } + + public boolean checkOid() { + long oidValue = Long.parseLong(getOid(), 16); + + // 数据类型不在范围内则返回false + bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); + if(BirmmDataBizTypeEnums.toType(bizType) == null) { + return false; + } + interval = (int) ((oidValue >> 11) & 0x7FF); + startMin = (int) (oidValue & 0x7FF); + + int hour = startMin / 60; + int minute = startMin % 60; + + startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); + + return true; + } + + public void setStartDate(String dateStr) { + LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + setStartDate(date); + } + + public void setStartDate(LocalDate date) { + startTime = startTime.withYear(date.getYear()); + startTime = startTime.withMonth(date.getMonthValue()); + startTime = startTime.withDayOfMonth(date.getDayOfMonth()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java new file mode 100644 index 0000000..6df22bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectCountTag extends BirmmBaseTag { + + final String COLLECT_COUNT_TAG_OID = "10000106"; + + // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 + int count; + + @Override + public String toString() { + return super.toString() + "[value: " + count + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + count = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java new file mode 100644 index 0000000..def754c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectIntervalTag extends BirmmBaseTag { + + final String COLLECT_INTERVAL_TAG_OID = "10000105"; + + // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java new file mode 100644 index 0000000..bcb3988 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java @@ -0,0 +1,62 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTimeTag extends BirmmBaseTag { + + final String DATETIME_TAG_OID = "10000051"; + + LocalDateTime dateTime; + + @Override + public String toString() { + return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 + + int year = dateTime.getYear() - 2000; + int month = dateTime.getMonthValue(); + int day = dateTime.getDayOfMonth(); + int hour = dateTime.getHour(); + int minute = dateTime.getMinute(); + int second = dateTime.getSecond(); + + result += String.format("%02x", year); + result += String.format("%02x", month); + result += String.format("%02x", day); + result += String.format("%02x", hour); + result += String.format("%02x", minute); + result += String.format("%02x", second); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + String hexH = valueStr.substring(6, 8); + String hexMin = valueStr.substring(8, 10); + String hexS = valueStr.substring(10, 12); + + dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), + BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); + } +} 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 new file mode 100644 index 0000000..9bb4820 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestIPTag extends BirmmBaseTag { + + final String DESTINATION_IP_TAG_OID = "10000022"; + + String ip; + + @Override + public String toString() { + return super.toString() + "[value: " + ip + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + ip = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} 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 new file mode 100644 index 0000000..ef29dca --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestPortTag extends BirmmBaseTag { + + final String DESTINATION_PORT_TAG_OID = "10000023"; + + String port; + + @Override + public String toString() { + return super.toString() + "[value: " + port + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + port = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java new file mode 100644 index 0000000..da05817 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class LowerLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000900"; + + // 单精度浮点数 + float lowerLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + lowerLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} 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 new file mode 100644 index 0000000..6d21a35 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RetryTimesTag extends BirmmBaseTag { + + final String RETRY_TIMES_TAG_OID = "1000000A"; + + // TYPE_U8整型,重传次数 1-10 + int times; + + @Override + public String toString() { + return super.toString() + "[value: " + times + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + times = Integer.parseInt(valueStr, 16); + } +} 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 new file mode 100644 index 0000000..925d162 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class StartTimeTag extends BirmmBaseTag { + + final String START_TIME_TAG_OID = "10000104"; + + // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 + int startMinute; + + @Override + public String toString() { + return super.toString() + "[value: " + startMinute + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + startMinute = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java new file mode 100644 index 0000000..f2392ee --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadIntervalTag extends BirmmBaseTag { + + final String UPLOAD_INTERVAL_TAG_OID = "10000062"; + + // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java new file mode 100644 index 0000000..a0bbe7d --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UpperLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000901"; + + // 单精度浮点数 + float upperLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + upperLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java new file mode 100644 index 0000000..9daab43 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class NeedOTATag extends BirmmBaseTag { + + final String NEED_OTA_TAG_OID = "60000600"; + + boolean need; + + @Override + public String toString() { + return super.toString() + "[value: " + need + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + need = Boolean.parseBoolean(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java new file mode 100644 index 0000000..0056fb8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageCRCTag extends BirmmBaseTag { + + final String PACKAGE_CRC_TAG_OID = "60000603"; + + String packCRC; + + @Override + public String toString() { + return super.toString() + "[value: " + packCRC + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + packCRC = valueStr; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java new file mode 100644 index 0000000..76566e0 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java @@ -0,0 +1,31 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.tomcat.util.buf.HexUtils; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageDataTag extends BirmmBaseTag { + + final String PACKAGE_DATA_TAG_OID = "60000601"; + + byte[] data; + + @Override + public String toString() { + return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID + result += String.format("%04d", data.length); // 长度 + result += HexUtils.toHexString(data); + + return result; + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java new file mode 100644 index 0000000..a7094dd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -0,0 +1,88 @@ +package com.casic.missiles.frame.tag; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +import com.casic.missiles.frame.tag.config.*; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; +import com.casic.missiles.frame.tag.signal.PCITag; +import com.casic.missiles.frame.tag.signal.RSRPTag; +import com.casic.missiles.frame.tag.signal.SNRTag; + +public class BirmmTagBuilderFactory { + + public static BirmmBaseTag createTagByOid(String oid) { + BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); + if (null != tag) { + switch (tag) { + case RETRY_TIMES_TAG: + return new RetryTimesTag(); + + case DESTINATION_IP_TAG: + return new DestIPTag(); + + case DESTINATION_PORT_TAG: + return new DestPortTag(); + + case DATE_TAG: + return new DateTag(); + + case DATETIME_TAG: + return new DateTimeTag(); + + case UPLOAD_INTERVAL_TAG: + return new UploadIntervalTag(); + + case START_TIME_TAG: + return new StartTimeTag(); + + case COLLECT_INTERVAL_TAG: + return new CollectIntervalTag(); + + case COLLECT_COUNT_TAG: + return new CollectCountTag(); + + case LOWER_LIMIT_TAG: + return new LowerLimitTag(); + + case UPPER_LIMIT_TAG: + return new UpperLimitTag(); + + case SENSOR_STATE_1_TAG: + case SENSOR_STATE_2_TAG: + case SENSOR_STATE_3_TAG: + case SENSOR_STATE_4_TAG: + case SENSOR_STATE_5_TAG: + // 传感器状态 需要根据设备类型单独处理 + return new SensorStateTag(); + + case CELL_TAG: + return new CellTag(); + + case SOFTWARE_VERSION_TAG: + return new SoftwareVersionTag(); + + case PCI_TAG: + return new PCITag(); + + case RSRP_TAG: + return new RSRPTag(); + + case SNR_TAG: + return new SNRTag(); + + default: + return null; + } + } + + // 业务上传报表 + if (oid.startsWith("C")) { + return new UploadTag(); + } + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java new file mode 100644 index 0000000..43dbb41 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java @@ -0,0 +1,25 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CellTag extends BirmmBaseTag { + + final String CELL_TAG_OID = "60000020"; + + int cellVal; + + @Override + public String toString() { + return super.toString() + "[value: " + cellVal + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + cellVal = Integer.parseInt(valueStr, 16); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java new file mode 100644 index 0000000..2514196 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java @@ -0,0 +1,33 @@ +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 java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTag extends BirmmBaseTag { + + final String DATE_TAG_OID = "10000050"; + + LocalDate date; + + @Override + public String toString() { + return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java new file mode 100644 index 0000000..a551cd5 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java @@ -0,0 +1,7 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; + +public class SensorStateTag extends BirmmBaseTag { + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java new file mode 100644 index 0000000..450a755 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadTag extends BirmmBaseTag { + + private int bizType; + private int interval; + private int startMin; + private LocalDateTime startTime; + + @Override + public String toString() { + return super.toString(); + } + + public boolean checkOid() { + long oidValue = Long.parseLong(getOid(), 16); + + // 数据类型不在范围内则返回false + bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); + if(BirmmDataBizTypeEnums.toType(bizType) == null) { + return false; + } + interval = (int) ((oidValue >> 11) & 0x7FF); + startMin = (int) (oidValue & 0x7FF); + + int hour = startMin / 60; + int minute = startMin % 60; + + startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); + + return true; + } + + public void setStartDate(String dateStr) { + LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + setStartDate(date); + } + + public void setStartDate(LocalDate date) { + startTime = startTime.withYear(date.getYear()); + startTime = startTime.withMonth(date.getMonthValue()); + startTime = startTime.withDayOfMonth(date.getDayOfMonth()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java new file mode 100644 index 0000000..6df22bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectCountTag extends BirmmBaseTag { + + final String COLLECT_COUNT_TAG_OID = "10000106"; + + // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 + int count; + + @Override + public String toString() { + return super.toString() + "[value: " + count + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + count = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java new file mode 100644 index 0000000..def754c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectIntervalTag extends BirmmBaseTag { + + final String COLLECT_INTERVAL_TAG_OID = "10000105"; + + // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java new file mode 100644 index 0000000..bcb3988 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java @@ -0,0 +1,62 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTimeTag extends BirmmBaseTag { + + final String DATETIME_TAG_OID = "10000051"; + + LocalDateTime dateTime; + + @Override + public String toString() { + return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 + + int year = dateTime.getYear() - 2000; + int month = dateTime.getMonthValue(); + int day = dateTime.getDayOfMonth(); + int hour = dateTime.getHour(); + int minute = dateTime.getMinute(); + int second = dateTime.getSecond(); + + result += String.format("%02x", year); + result += String.format("%02x", month); + result += String.format("%02x", day); + result += String.format("%02x", hour); + result += String.format("%02x", minute); + result += String.format("%02x", second); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + String hexH = valueStr.substring(6, 8); + String hexMin = valueStr.substring(8, 10); + String hexS = valueStr.substring(10, 12); + + dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), + BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); + } +} 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 new file mode 100644 index 0000000..9bb4820 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestIPTag extends BirmmBaseTag { + + final String DESTINATION_IP_TAG_OID = "10000022"; + + String ip; + + @Override + public String toString() { + return super.toString() + "[value: " + ip + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + ip = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} 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 new file mode 100644 index 0000000..ef29dca --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestPortTag extends BirmmBaseTag { + + final String DESTINATION_PORT_TAG_OID = "10000023"; + + String port; + + @Override + public String toString() { + return super.toString() + "[value: " + port + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + port = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java new file mode 100644 index 0000000..da05817 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class LowerLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000900"; + + // 单精度浮点数 + float lowerLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + lowerLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} 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 new file mode 100644 index 0000000..6d21a35 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RetryTimesTag extends BirmmBaseTag { + + final String RETRY_TIMES_TAG_OID = "1000000A"; + + // TYPE_U8整型,重传次数 1-10 + int times; + + @Override + public String toString() { + return super.toString() + "[value: " + times + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + times = Integer.parseInt(valueStr, 16); + } +} 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 new file mode 100644 index 0000000..925d162 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class StartTimeTag extends BirmmBaseTag { + + final String START_TIME_TAG_OID = "10000104"; + + // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 + int startMinute; + + @Override + public String toString() { + return super.toString() + "[value: " + startMinute + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + startMinute = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java new file mode 100644 index 0000000..f2392ee --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadIntervalTag extends BirmmBaseTag { + + final String UPLOAD_INTERVAL_TAG_OID = "10000062"; + + // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java new file mode 100644 index 0000000..a0bbe7d --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UpperLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000901"; + + // 单精度浮点数 + float upperLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + upperLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java new file mode 100644 index 0000000..9daab43 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class NeedOTATag extends BirmmBaseTag { + + final String NEED_OTA_TAG_OID = "60000600"; + + boolean need; + + @Override + public String toString() { + return super.toString() + "[value: " + need + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + need = Boolean.parseBoolean(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java new file mode 100644 index 0000000..0056fb8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageCRCTag extends BirmmBaseTag { + + final String PACKAGE_CRC_TAG_OID = "60000603"; + + String packCRC; + + @Override + public String toString() { + return super.toString() + "[value: " + packCRC + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + packCRC = valueStr; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java new file mode 100644 index 0000000..76566e0 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java @@ -0,0 +1,31 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.tomcat.util.buf.HexUtils; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageDataTag extends BirmmBaseTag { + + final String PACKAGE_DATA_TAG_OID = "60000601"; + + byte[] data; + + @Override + public String toString() { + return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID + result += String.format("%04d", data.length); // 长度 + result += HexUtils.toHexString(data); + + return result; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java new file mode 100644 index 0000000..8331ebd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageSizeTag extends BirmmBaseTag { + + final String PACKAGE_SIZE_TAG_OID = "60000602"; + + int packSize; + + @Override + public String toString() { + return super.toString() + "[value: " + packSize + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + packSize = Integer.parseInt(valueStr); + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java new file mode 100644 index 0000000..a7094dd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -0,0 +1,88 @@ +package com.casic.missiles.frame.tag; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +import com.casic.missiles.frame.tag.config.*; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; +import com.casic.missiles.frame.tag.signal.PCITag; +import com.casic.missiles.frame.tag.signal.RSRPTag; +import com.casic.missiles.frame.tag.signal.SNRTag; + +public class BirmmTagBuilderFactory { + + public static BirmmBaseTag createTagByOid(String oid) { + BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); + if (null != tag) { + switch (tag) { + case RETRY_TIMES_TAG: + return new RetryTimesTag(); + + case DESTINATION_IP_TAG: + return new DestIPTag(); + + case DESTINATION_PORT_TAG: + return new DestPortTag(); + + case DATE_TAG: + return new DateTag(); + + case DATETIME_TAG: + return new DateTimeTag(); + + case UPLOAD_INTERVAL_TAG: + return new UploadIntervalTag(); + + case START_TIME_TAG: + return new StartTimeTag(); + + case COLLECT_INTERVAL_TAG: + return new CollectIntervalTag(); + + case COLLECT_COUNT_TAG: + return new CollectCountTag(); + + case LOWER_LIMIT_TAG: + return new LowerLimitTag(); + + case UPPER_LIMIT_TAG: + return new UpperLimitTag(); + + case SENSOR_STATE_1_TAG: + case SENSOR_STATE_2_TAG: + case SENSOR_STATE_3_TAG: + case SENSOR_STATE_4_TAG: + case SENSOR_STATE_5_TAG: + // 传感器状态 需要根据设备类型单独处理 + return new SensorStateTag(); + + case CELL_TAG: + return new CellTag(); + + case SOFTWARE_VERSION_TAG: + return new SoftwareVersionTag(); + + case PCI_TAG: + return new PCITag(); + + case RSRP_TAG: + return new RSRPTag(); + + case SNR_TAG: + return new SNRTag(); + + default: + return null; + } + } + + // 业务上传报表 + if (oid.startsWith("C")) { + return new UploadTag(); + } + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java new file mode 100644 index 0000000..43dbb41 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java @@ -0,0 +1,25 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CellTag extends BirmmBaseTag { + + final String CELL_TAG_OID = "60000020"; + + int cellVal; + + @Override + public String toString() { + return super.toString() + "[value: " + cellVal + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + cellVal = Integer.parseInt(valueStr, 16); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java new file mode 100644 index 0000000..2514196 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java @@ -0,0 +1,33 @@ +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 java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTag extends BirmmBaseTag { + + final String DATE_TAG_OID = "10000050"; + + LocalDate date; + + @Override + public String toString() { + return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java new file mode 100644 index 0000000..a551cd5 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java @@ -0,0 +1,7 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; + +public class SensorStateTag extends BirmmBaseTag { + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java new file mode 100644 index 0000000..450a755 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadTag extends BirmmBaseTag { + + private int bizType; + private int interval; + private int startMin; + private LocalDateTime startTime; + + @Override + public String toString() { + return super.toString(); + } + + public boolean checkOid() { + long oidValue = Long.parseLong(getOid(), 16); + + // 数据类型不在范围内则返回false + bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); + if(BirmmDataBizTypeEnums.toType(bizType) == null) { + return false; + } + interval = (int) ((oidValue >> 11) & 0x7FF); + startMin = (int) (oidValue & 0x7FF); + + int hour = startMin / 60; + int minute = startMin % 60; + + startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); + + return true; + } + + public void setStartDate(String dateStr) { + LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + setStartDate(date); + } + + public void setStartDate(LocalDate date) { + startTime = startTime.withYear(date.getYear()); + startTime = startTime.withMonth(date.getMonthValue()); + startTime = startTime.withDayOfMonth(date.getDayOfMonth()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java new file mode 100644 index 0000000..6df22bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectCountTag extends BirmmBaseTag { + + final String COLLECT_COUNT_TAG_OID = "10000106"; + + // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 + int count; + + @Override + public String toString() { + return super.toString() + "[value: " + count + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + count = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java new file mode 100644 index 0000000..def754c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectIntervalTag extends BirmmBaseTag { + + final String COLLECT_INTERVAL_TAG_OID = "10000105"; + + // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java new file mode 100644 index 0000000..bcb3988 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java @@ -0,0 +1,62 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTimeTag extends BirmmBaseTag { + + final String DATETIME_TAG_OID = "10000051"; + + LocalDateTime dateTime; + + @Override + public String toString() { + return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 + + int year = dateTime.getYear() - 2000; + int month = dateTime.getMonthValue(); + int day = dateTime.getDayOfMonth(); + int hour = dateTime.getHour(); + int minute = dateTime.getMinute(); + int second = dateTime.getSecond(); + + result += String.format("%02x", year); + result += String.format("%02x", month); + result += String.format("%02x", day); + result += String.format("%02x", hour); + result += String.format("%02x", minute); + result += String.format("%02x", second); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + String hexH = valueStr.substring(6, 8); + String hexMin = valueStr.substring(8, 10); + String hexS = valueStr.substring(10, 12); + + dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), + BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); + } +} 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 new file mode 100644 index 0000000..9bb4820 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestIPTag extends BirmmBaseTag { + + final String DESTINATION_IP_TAG_OID = "10000022"; + + String ip; + + @Override + public String toString() { + return super.toString() + "[value: " + ip + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + ip = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} 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 new file mode 100644 index 0000000..ef29dca --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestPortTag extends BirmmBaseTag { + + final String DESTINATION_PORT_TAG_OID = "10000023"; + + String port; + + @Override + public String toString() { + return super.toString() + "[value: " + port + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + port = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java new file mode 100644 index 0000000..da05817 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class LowerLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000900"; + + // 单精度浮点数 + float lowerLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + lowerLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} 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 new file mode 100644 index 0000000..6d21a35 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RetryTimesTag extends BirmmBaseTag { + + final String RETRY_TIMES_TAG_OID = "1000000A"; + + // TYPE_U8整型,重传次数 1-10 + int times; + + @Override + public String toString() { + return super.toString() + "[value: " + times + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + times = Integer.parseInt(valueStr, 16); + } +} 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 new file mode 100644 index 0000000..925d162 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class StartTimeTag extends BirmmBaseTag { + + final String START_TIME_TAG_OID = "10000104"; + + // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 + int startMinute; + + @Override + public String toString() { + return super.toString() + "[value: " + startMinute + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + startMinute = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java new file mode 100644 index 0000000..f2392ee --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadIntervalTag extends BirmmBaseTag { + + final String UPLOAD_INTERVAL_TAG_OID = "10000062"; + + // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java new file mode 100644 index 0000000..a0bbe7d --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UpperLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000901"; + + // 单精度浮点数 + float upperLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + upperLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java new file mode 100644 index 0000000..9daab43 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class NeedOTATag extends BirmmBaseTag { + + final String NEED_OTA_TAG_OID = "60000600"; + + boolean need; + + @Override + public String toString() { + return super.toString() + "[value: " + need + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + need = Boolean.parseBoolean(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java new file mode 100644 index 0000000..0056fb8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageCRCTag extends BirmmBaseTag { + + final String PACKAGE_CRC_TAG_OID = "60000603"; + + String packCRC; + + @Override + public String toString() { + return super.toString() + "[value: " + packCRC + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + packCRC = valueStr; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java new file mode 100644 index 0000000..76566e0 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java @@ -0,0 +1,31 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.tomcat.util.buf.HexUtils; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageDataTag extends BirmmBaseTag { + + final String PACKAGE_DATA_TAG_OID = "60000601"; + + byte[] data; + + @Override + public String toString() { + return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID + result += String.format("%04d", data.length); // 长度 + result += HexUtils.toHexString(data); + + return result; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java new file mode 100644 index 0000000..8331ebd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageSizeTag extends BirmmBaseTag { + + final String PACKAGE_SIZE_TAG_OID = "60000602"; + + int packSize; + + @Override + public String toString() { + return super.toString() + "[value: " + packSize + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + packSize = Integer.parseInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java new file mode 100644 index 0000000..35cf112 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java @@ -0,0 +1,37 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RequestOffsetTag extends BirmmBaseTag { + + final String REQUEST_OFFSET_TAG_OID = "20000102"; + + // 本次请求的升级包偏移量 + int requestOffset; + + @Override + public String toString() { + return super.toString() + "[value: " + requestOffset + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + requestOffset = Integer.parseInt(valueStr); + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java new file mode 100644 index 0000000..a7094dd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -0,0 +1,88 @@ +package com.casic.missiles.frame.tag; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +import com.casic.missiles.frame.tag.config.*; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; +import com.casic.missiles.frame.tag.signal.PCITag; +import com.casic.missiles.frame.tag.signal.RSRPTag; +import com.casic.missiles.frame.tag.signal.SNRTag; + +public class BirmmTagBuilderFactory { + + public static BirmmBaseTag createTagByOid(String oid) { + BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); + if (null != tag) { + switch (tag) { + case RETRY_TIMES_TAG: + return new RetryTimesTag(); + + case DESTINATION_IP_TAG: + return new DestIPTag(); + + case DESTINATION_PORT_TAG: + return new DestPortTag(); + + case DATE_TAG: + return new DateTag(); + + case DATETIME_TAG: + return new DateTimeTag(); + + case UPLOAD_INTERVAL_TAG: + return new UploadIntervalTag(); + + case START_TIME_TAG: + return new StartTimeTag(); + + case COLLECT_INTERVAL_TAG: + return new CollectIntervalTag(); + + case COLLECT_COUNT_TAG: + return new CollectCountTag(); + + case LOWER_LIMIT_TAG: + return new LowerLimitTag(); + + case UPPER_LIMIT_TAG: + return new UpperLimitTag(); + + case SENSOR_STATE_1_TAG: + case SENSOR_STATE_2_TAG: + case SENSOR_STATE_3_TAG: + case SENSOR_STATE_4_TAG: + case SENSOR_STATE_5_TAG: + // 传感器状态 需要根据设备类型单独处理 + return new SensorStateTag(); + + case CELL_TAG: + return new CellTag(); + + case SOFTWARE_VERSION_TAG: + return new SoftwareVersionTag(); + + case PCI_TAG: + return new PCITag(); + + case RSRP_TAG: + return new RSRPTag(); + + case SNR_TAG: + return new SNRTag(); + + default: + return null; + } + } + + // 业务上传报表 + if (oid.startsWith("C")) { + return new UploadTag(); + } + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java new file mode 100644 index 0000000..43dbb41 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java @@ -0,0 +1,25 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CellTag extends BirmmBaseTag { + + final String CELL_TAG_OID = "60000020"; + + int cellVal; + + @Override + public String toString() { + return super.toString() + "[value: " + cellVal + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + cellVal = Integer.parseInt(valueStr, 16); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java new file mode 100644 index 0000000..2514196 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java @@ -0,0 +1,33 @@ +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 java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTag extends BirmmBaseTag { + + final String DATE_TAG_OID = "10000050"; + + LocalDate date; + + @Override + public String toString() { + return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java new file mode 100644 index 0000000..a551cd5 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java @@ -0,0 +1,7 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; + +public class SensorStateTag extends BirmmBaseTag { + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java new file mode 100644 index 0000000..450a755 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadTag extends BirmmBaseTag { + + private int bizType; + private int interval; + private int startMin; + private LocalDateTime startTime; + + @Override + public String toString() { + return super.toString(); + } + + public boolean checkOid() { + long oidValue = Long.parseLong(getOid(), 16); + + // 数据类型不在范围内则返回false + bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); + if(BirmmDataBizTypeEnums.toType(bizType) == null) { + return false; + } + interval = (int) ((oidValue >> 11) & 0x7FF); + startMin = (int) (oidValue & 0x7FF); + + int hour = startMin / 60; + int minute = startMin % 60; + + startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); + + return true; + } + + public void setStartDate(String dateStr) { + LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + setStartDate(date); + } + + public void setStartDate(LocalDate date) { + startTime = startTime.withYear(date.getYear()); + startTime = startTime.withMonth(date.getMonthValue()); + startTime = startTime.withDayOfMonth(date.getDayOfMonth()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java new file mode 100644 index 0000000..6df22bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectCountTag extends BirmmBaseTag { + + final String COLLECT_COUNT_TAG_OID = "10000106"; + + // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 + int count; + + @Override + public String toString() { + return super.toString() + "[value: " + count + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + count = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java new file mode 100644 index 0000000..def754c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectIntervalTag extends BirmmBaseTag { + + final String COLLECT_INTERVAL_TAG_OID = "10000105"; + + // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java new file mode 100644 index 0000000..bcb3988 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java @@ -0,0 +1,62 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTimeTag extends BirmmBaseTag { + + final String DATETIME_TAG_OID = "10000051"; + + LocalDateTime dateTime; + + @Override + public String toString() { + return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 + + int year = dateTime.getYear() - 2000; + int month = dateTime.getMonthValue(); + int day = dateTime.getDayOfMonth(); + int hour = dateTime.getHour(); + int minute = dateTime.getMinute(); + int second = dateTime.getSecond(); + + result += String.format("%02x", year); + result += String.format("%02x", month); + result += String.format("%02x", day); + result += String.format("%02x", hour); + result += String.format("%02x", minute); + result += String.format("%02x", second); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + String hexH = valueStr.substring(6, 8); + String hexMin = valueStr.substring(8, 10); + String hexS = valueStr.substring(10, 12); + + dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), + BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); + } +} 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 new file mode 100644 index 0000000..9bb4820 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestIPTag extends BirmmBaseTag { + + final String DESTINATION_IP_TAG_OID = "10000022"; + + String ip; + + @Override + public String toString() { + return super.toString() + "[value: " + ip + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + ip = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} 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 new file mode 100644 index 0000000..ef29dca --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestPortTag extends BirmmBaseTag { + + final String DESTINATION_PORT_TAG_OID = "10000023"; + + String port; + + @Override + public String toString() { + return super.toString() + "[value: " + port + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + port = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java new file mode 100644 index 0000000..da05817 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class LowerLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000900"; + + // 单精度浮点数 + float lowerLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + lowerLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} 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 new file mode 100644 index 0000000..6d21a35 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RetryTimesTag extends BirmmBaseTag { + + final String RETRY_TIMES_TAG_OID = "1000000A"; + + // TYPE_U8整型,重传次数 1-10 + int times; + + @Override + public String toString() { + return super.toString() + "[value: " + times + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + times = Integer.parseInt(valueStr, 16); + } +} 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 new file mode 100644 index 0000000..925d162 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class StartTimeTag extends BirmmBaseTag { + + final String START_TIME_TAG_OID = "10000104"; + + // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 + int startMinute; + + @Override + public String toString() { + return super.toString() + "[value: " + startMinute + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + startMinute = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java new file mode 100644 index 0000000..f2392ee --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadIntervalTag extends BirmmBaseTag { + + final String UPLOAD_INTERVAL_TAG_OID = "10000062"; + + // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java new file mode 100644 index 0000000..a0bbe7d --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UpperLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000901"; + + // 单精度浮点数 + float upperLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + upperLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java new file mode 100644 index 0000000..9daab43 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class NeedOTATag extends BirmmBaseTag { + + final String NEED_OTA_TAG_OID = "60000600"; + + boolean need; + + @Override + public String toString() { + return super.toString() + "[value: " + need + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + need = Boolean.parseBoolean(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java new file mode 100644 index 0000000..0056fb8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageCRCTag extends BirmmBaseTag { + + final String PACKAGE_CRC_TAG_OID = "60000603"; + + String packCRC; + + @Override + public String toString() { + return super.toString() + "[value: " + packCRC + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + packCRC = valueStr; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java new file mode 100644 index 0000000..76566e0 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java @@ -0,0 +1,31 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.tomcat.util.buf.HexUtils; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageDataTag extends BirmmBaseTag { + + final String PACKAGE_DATA_TAG_OID = "60000601"; + + byte[] data; + + @Override + public String toString() { + return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID + result += String.format("%04d", data.length); // 长度 + result += HexUtils.toHexString(data); + + return result; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java new file mode 100644 index 0000000..8331ebd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageSizeTag extends BirmmBaseTag { + + final String PACKAGE_SIZE_TAG_OID = "60000602"; + + int packSize; + + @Override + public String toString() { + return super.toString() + "[value: " + packSize + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + packSize = Integer.parseInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java new file mode 100644 index 0000000..35cf112 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java @@ -0,0 +1,37 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RequestOffsetTag extends BirmmBaseTag { + + final String REQUEST_OFFSET_TAG_OID = "20000102"; + + // 本次请求的升级包偏移量 + int requestOffset; + + @Override + public String toString() { + return super.toString() + "[value: " + requestOffset + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + requestOffset = Integer.parseInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java new file mode 100644 index 0000000..50b0b72 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RequestSizeTag extends BirmmBaseTag { + + final String REQUEST_SIZE_TAG_OID = "20000100"; + + // 本次请求的升级包大小 + int requestSize; + + @Override + public String toString() { + return super.toString() + "[value: " + requestSize + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + requestSize = Integer.parseInt(valueStr); + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java new file mode 100644 index 0000000..a7094dd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -0,0 +1,88 @@ +package com.casic.missiles.frame.tag; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +import com.casic.missiles.frame.tag.config.*; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; +import com.casic.missiles.frame.tag.signal.PCITag; +import com.casic.missiles.frame.tag.signal.RSRPTag; +import com.casic.missiles.frame.tag.signal.SNRTag; + +public class BirmmTagBuilderFactory { + + public static BirmmBaseTag createTagByOid(String oid) { + BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); + if (null != tag) { + switch (tag) { + case RETRY_TIMES_TAG: + return new RetryTimesTag(); + + case DESTINATION_IP_TAG: + return new DestIPTag(); + + case DESTINATION_PORT_TAG: + return new DestPortTag(); + + case DATE_TAG: + return new DateTag(); + + case DATETIME_TAG: + return new DateTimeTag(); + + case UPLOAD_INTERVAL_TAG: + return new UploadIntervalTag(); + + case START_TIME_TAG: + return new StartTimeTag(); + + case COLLECT_INTERVAL_TAG: + return new CollectIntervalTag(); + + case COLLECT_COUNT_TAG: + return new CollectCountTag(); + + case LOWER_LIMIT_TAG: + return new LowerLimitTag(); + + case UPPER_LIMIT_TAG: + return new UpperLimitTag(); + + case SENSOR_STATE_1_TAG: + case SENSOR_STATE_2_TAG: + case SENSOR_STATE_3_TAG: + case SENSOR_STATE_4_TAG: + case SENSOR_STATE_5_TAG: + // 传感器状态 需要根据设备类型单独处理 + return new SensorStateTag(); + + case CELL_TAG: + return new CellTag(); + + case SOFTWARE_VERSION_TAG: + return new SoftwareVersionTag(); + + case PCI_TAG: + return new PCITag(); + + case RSRP_TAG: + return new RSRPTag(); + + case SNR_TAG: + return new SNRTag(); + + default: + return null; + } + } + + // 业务上传报表 + if (oid.startsWith("C")) { + return new UploadTag(); + } + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java new file mode 100644 index 0000000..43dbb41 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java @@ -0,0 +1,25 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CellTag extends BirmmBaseTag { + + final String CELL_TAG_OID = "60000020"; + + int cellVal; + + @Override + public String toString() { + return super.toString() + "[value: " + cellVal + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + cellVal = Integer.parseInt(valueStr, 16); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java new file mode 100644 index 0000000..2514196 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java @@ -0,0 +1,33 @@ +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 java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTag extends BirmmBaseTag { + + final String DATE_TAG_OID = "10000050"; + + LocalDate date; + + @Override + public String toString() { + return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java new file mode 100644 index 0000000..a551cd5 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java @@ -0,0 +1,7 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; + +public class SensorStateTag extends BirmmBaseTag { + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java new file mode 100644 index 0000000..450a755 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadTag extends BirmmBaseTag { + + private int bizType; + private int interval; + private int startMin; + private LocalDateTime startTime; + + @Override + public String toString() { + return super.toString(); + } + + public boolean checkOid() { + long oidValue = Long.parseLong(getOid(), 16); + + // 数据类型不在范围内则返回false + bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); + if(BirmmDataBizTypeEnums.toType(bizType) == null) { + return false; + } + interval = (int) ((oidValue >> 11) & 0x7FF); + startMin = (int) (oidValue & 0x7FF); + + int hour = startMin / 60; + int minute = startMin % 60; + + startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); + + return true; + } + + public void setStartDate(String dateStr) { + LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + setStartDate(date); + } + + public void setStartDate(LocalDate date) { + startTime = startTime.withYear(date.getYear()); + startTime = startTime.withMonth(date.getMonthValue()); + startTime = startTime.withDayOfMonth(date.getDayOfMonth()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java new file mode 100644 index 0000000..6df22bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectCountTag extends BirmmBaseTag { + + final String COLLECT_COUNT_TAG_OID = "10000106"; + + // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 + int count; + + @Override + public String toString() { + return super.toString() + "[value: " + count + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + count = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java new file mode 100644 index 0000000..def754c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectIntervalTag extends BirmmBaseTag { + + final String COLLECT_INTERVAL_TAG_OID = "10000105"; + + // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java new file mode 100644 index 0000000..bcb3988 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java @@ -0,0 +1,62 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTimeTag extends BirmmBaseTag { + + final String DATETIME_TAG_OID = "10000051"; + + LocalDateTime dateTime; + + @Override + public String toString() { + return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 + + int year = dateTime.getYear() - 2000; + int month = dateTime.getMonthValue(); + int day = dateTime.getDayOfMonth(); + int hour = dateTime.getHour(); + int minute = dateTime.getMinute(); + int second = dateTime.getSecond(); + + result += String.format("%02x", year); + result += String.format("%02x", month); + result += String.format("%02x", day); + result += String.format("%02x", hour); + result += String.format("%02x", minute); + result += String.format("%02x", second); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + String hexH = valueStr.substring(6, 8); + String hexMin = valueStr.substring(8, 10); + String hexS = valueStr.substring(10, 12); + + dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), + BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); + } +} 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 new file mode 100644 index 0000000..9bb4820 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestIPTag extends BirmmBaseTag { + + final String DESTINATION_IP_TAG_OID = "10000022"; + + String ip; + + @Override + public String toString() { + return super.toString() + "[value: " + ip + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + ip = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} 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 new file mode 100644 index 0000000..ef29dca --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestPortTag extends BirmmBaseTag { + + final String DESTINATION_PORT_TAG_OID = "10000023"; + + String port; + + @Override + public String toString() { + return super.toString() + "[value: " + port + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + port = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java new file mode 100644 index 0000000..da05817 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class LowerLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000900"; + + // 单精度浮点数 + float lowerLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + lowerLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} 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 new file mode 100644 index 0000000..6d21a35 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RetryTimesTag extends BirmmBaseTag { + + final String RETRY_TIMES_TAG_OID = "1000000A"; + + // TYPE_U8整型,重传次数 1-10 + int times; + + @Override + public String toString() { + return super.toString() + "[value: " + times + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + times = Integer.parseInt(valueStr, 16); + } +} 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 new file mode 100644 index 0000000..925d162 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class StartTimeTag extends BirmmBaseTag { + + final String START_TIME_TAG_OID = "10000104"; + + // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 + int startMinute; + + @Override + public String toString() { + return super.toString() + "[value: " + startMinute + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + startMinute = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java new file mode 100644 index 0000000..f2392ee --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadIntervalTag extends BirmmBaseTag { + + final String UPLOAD_INTERVAL_TAG_OID = "10000062"; + + // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java new file mode 100644 index 0000000..a0bbe7d --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UpperLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000901"; + + // 单精度浮点数 + float upperLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + upperLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java new file mode 100644 index 0000000..9daab43 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class NeedOTATag extends BirmmBaseTag { + + final String NEED_OTA_TAG_OID = "60000600"; + + boolean need; + + @Override + public String toString() { + return super.toString() + "[value: " + need + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + need = Boolean.parseBoolean(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java new file mode 100644 index 0000000..0056fb8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageCRCTag extends BirmmBaseTag { + + final String PACKAGE_CRC_TAG_OID = "60000603"; + + String packCRC; + + @Override + public String toString() { + return super.toString() + "[value: " + packCRC + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + packCRC = valueStr; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java new file mode 100644 index 0000000..76566e0 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java @@ -0,0 +1,31 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.tomcat.util.buf.HexUtils; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageDataTag extends BirmmBaseTag { + + final String PACKAGE_DATA_TAG_OID = "60000601"; + + byte[] data; + + @Override + public String toString() { + return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID + result += String.format("%04d", data.length); // 长度 + result += HexUtils.toHexString(data); + + return result; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java new file mode 100644 index 0000000..8331ebd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageSizeTag extends BirmmBaseTag { + + final String PACKAGE_SIZE_TAG_OID = "60000602"; + + int packSize; + + @Override + public String toString() { + return super.toString() + "[value: " + packSize + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + packSize = Integer.parseInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java new file mode 100644 index 0000000..35cf112 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java @@ -0,0 +1,37 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RequestOffsetTag extends BirmmBaseTag { + + final String REQUEST_OFFSET_TAG_OID = "20000102"; + + // 本次请求的升级包偏移量 + int requestOffset; + + @Override + public String toString() { + return super.toString() + "[value: " + requestOffset + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + requestOffset = Integer.parseInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java new file mode 100644 index 0000000..50b0b72 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RequestSizeTag extends BirmmBaseTag { + + final String REQUEST_SIZE_TAG_OID = "20000100"; + + // 本次请求的升级包大小 + int requestSize; + + @Override + public String toString() { + return super.toString() + "[value: " + requestSize + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + requestSize = Integer.parseInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java new file mode 100644 index 0000000..0bf69fd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class SoftwareVersionTag extends BirmmBaseTag { + + final String SOFTWARE_VERSION_TAG_OID = "60000500"; + + String version; + + @Override + public String toString() { + return super.toString() + "[value: " + version + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + version = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java new file mode 100644 index 0000000..a7094dd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -0,0 +1,88 @@ +package com.casic.missiles.frame.tag; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +import com.casic.missiles.frame.tag.config.*; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; +import com.casic.missiles.frame.tag.signal.PCITag; +import com.casic.missiles.frame.tag.signal.RSRPTag; +import com.casic.missiles.frame.tag.signal.SNRTag; + +public class BirmmTagBuilderFactory { + + public static BirmmBaseTag createTagByOid(String oid) { + BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); + if (null != tag) { + switch (tag) { + case RETRY_TIMES_TAG: + return new RetryTimesTag(); + + case DESTINATION_IP_TAG: + return new DestIPTag(); + + case DESTINATION_PORT_TAG: + return new DestPortTag(); + + case DATE_TAG: + return new DateTag(); + + case DATETIME_TAG: + return new DateTimeTag(); + + case UPLOAD_INTERVAL_TAG: + return new UploadIntervalTag(); + + case START_TIME_TAG: + return new StartTimeTag(); + + case COLLECT_INTERVAL_TAG: + return new CollectIntervalTag(); + + case COLLECT_COUNT_TAG: + return new CollectCountTag(); + + case LOWER_LIMIT_TAG: + return new LowerLimitTag(); + + case UPPER_LIMIT_TAG: + return new UpperLimitTag(); + + case SENSOR_STATE_1_TAG: + case SENSOR_STATE_2_TAG: + case SENSOR_STATE_3_TAG: + case SENSOR_STATE_4_TAG: + case SENSOR_STATE_5_TAG: + // 传感器状态 需要根据设备类型单独处理 + return new SensorStateTag(); + + case CELL_TAG: + return new CellTag(); + + case SOFTWARE_VERSION_TAG: + return new SoftwareVersionTag(); + + case PCI_TAG: + return new PCITag(); + + case RSRP_TAG: + return new RSRPTag(); + + case SNR_TAG: + return new SNRTag(); + + default: + return null; + } + } + + // 业务上传报表 + if (oid.startsWith("C")) { + return new UploadTag(); + } + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java new file mode 100644 index 0000000..43dbb41 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java @@ -0,0 +1,25 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CellTag extends BirmmBaseTag { + + final String CELL_TAG_OID = "60000020"; + + int cellVal; + + @Override + public String toString() { + return super.toString() + "[value: " + cellVal + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + cellVal = Integer.parseInt(valueStr, 16); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java new file mode 100644 index 0000000..2514196 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java @@ -0,0 +1,33 @@ +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 java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTag extends BirmmBaseTag { + + final String DATE_TAG_OID = "10000050"; + + LocalDate date; + + @Override + public String toString() { + return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java new file mode 100644 index 0000000..a551cd5 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java @@ -0,0 +1,7 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; + +public class SensorStateTag extends BirmmBaseTag { + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java new file mode 100644 index 0000000..450a755 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadTag extends BirmmBaseTag { + + private int bizType; + private int interval; + private int startMin; + private LocalDateTime startTime; + + @Override + public String toString() { + return super.toString(); + } + + public boolean checkOid() { + long oidValue = Long.parseLong(getOid(), 16); + + // 数据类型不在范围内则返回false + bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); + if(BirmmDataBizTypeEnums.toType(bizType) == null) { + return false; + } + interval = (int) ((oidValue >> 11) & 0x7FF); + startMin = (int) (oidValue & 0x7FF); + + int hour = startMin / 60; + int minute = startMin % 60; + + startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); + + return true; + } + + public void setStartDate(String dateStr) { + LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + setStartDate(date); + } + + public void setStartDate(LocalDate date) { + startTime = startTime.withYear(date.getYear()); + startTime = startTime.withMonth(date.getMonthValue()); + startTime = startTime.withDayOfMonth(date.getDayOfMonth()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java new file mode 100644 index 0000000..6df22bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectCountTag extends BirmmBaseTag { + + final String COLLECT_COUNT_TAG_OID = "10000106"; + + // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 + int count; + + @Override + public String toString() { + return super.toString() + "[value: " + count + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + count = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java new file mode 100644 index 0000000..def754c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectIntervalTag extends BirmmBaseTag { + + final String COLLECT_INTERVAL_TAG_OID = "10000105"; + + // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java new file mode 100644 index 0000000..bcb3988 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java @@ -0,0 +1,62 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTimeTag extends BirmmBaseTag { + + final String DATETIME_TAG_OID = "10000051"; + + LocalDateTime dateTime; + + @Override + public String toString() { + return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 + + int year = dateTime.getYear() - 2000; + int month = dateTime.getMonthValue(); + int day = dateTime.getDayOfMonth(); + int hour = dateTime.getHour(); + int minute = dateTime.getMinute(); + int second = dateTime.getSecond(); + + result += String.format("%02x", year); + result += String.format("%02x", month); + result += String.format("%02x", day); + result += String.format("%02x", hour); + result += String.format("%02x", minute); + result += String.format("%02x", second); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + String hexH = valueStr.substring(6, 8); + String hexMin = valueStr.substring(8, 10); + String hexS = valueStr.substring(10, 12); + + dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), + BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); + } +} 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 new file mode 100644 index 0000000..9bb4820 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestIPTag extends BirmmBaseTag { + + final String DESTINATION_IP_TAG_OID = "10000022"; + + String ip; + + @Override + public String toString() { + return super.toString() + "[value: " + ip + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + ip = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} 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 new file mode 100644 index 0000000..ef29dca --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestPortTag extends BirmmBaseTag { + + final String DESTINATION_PORT_TAG_OID = "10000023"; + + String port; + + @Override + public String toString() { + return super.toString() + "[value: " + port + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + port = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java new file mode 100644 index 0000000..da05817 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class LowerLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000900"; + + // 单精度浮点数 + float lowerLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + lowerLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} 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 new file mode 100644 index 0000000..6d21a35 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RetryTimesTag extends BirmmBaseTag { + + final String RETRY_TIMES_TAG_OID = "1000000A"; + + // TYPE_U8整型,重传次数 1-10 + int times; + + @Override + public String toString() { + return super.toString() + "[value: " + times + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + times = Integer.parseInt(valueStr, 16); + } +} 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 new file mode 100644 index 0000000..925d162 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class StartTimeTag extends BirmmBaseTag { + + final String START_TIME_TAG_OID = "10000104"; + + // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 + int startMinute; + + @Override + public String toString() { + return super.toString() + "[value: " + startMinute + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + startMinute = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java new file mode 100644 index 0000000..f2392ee --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadIntervalTag extends BirmmBaseTag { + + final String UPLOAD_INTERVAL_TAG_OID = "10000062"; + + // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java new file mode 100644 index 0000000..a0bbe7d --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UpperLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000901"; + + // 单精度浮点数 + float upperLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + upperLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java new file mode 100644 index 0000000..9daab43 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class NeedOTATag extends BirmmBaseTag { + + final String NEED_OTA_TAG_OID = "60000600"; + + boolean need; + + @Override + public String toString() { + return super.toString() + "[value: " + need + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + need = Boolean.parseBoolean(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java new file mode 100644 index 0000000..0056fb8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageCRCTag extends BirmmBaseTag { + + final String PACKAGE_CRC_TAG_OID = "60000603"; + + String packCRC; + + @Override + public String toString() { + return super.toString() + "[value: " + packCRC + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + packCRC = valueStr; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java new file mode 100644 index 0000000..76566e0 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java @@ -0,0 +1,31 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.tomcat.util.buf.HexUtils; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageDataTag extends BirmmBaseTag { + + final String PACKAGE_DATA_TAG_OID = "60000601"; + + byte[] data; + + @Override + public String toString() { + return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID + result += String.format("%04d", data.length); // 长度 + result += HexUtils.toHexString(data); + + return result; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java new file mode 100644 index 0000000..8331ebd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageSizeTag extends BirmmBaseTag { + + final String PACKAGE_SIZE_TAG_OID = "60000602"; + + int packSize; + + @Override + public String toString() { + return super.toString() + "[value: " + packSize + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + packSize = Integer.parseInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java new file mode 100644 index 0000000..35cf112 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java @@ -0,0 +1,37 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RequestOffsetTag extends BirmmBaseTag { + + final String REQUEST_OFFSET_TAG_OID = "20000102"; + + // 本次请求的升级包偏移量 + int requestOffset; + + @Override + public String toString() { + return super.toString() + "[value: " + requestOffset + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + requestOffset = Integer.parseInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java new file mode 100644 index 0000000..50b0b72 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RequestSizeTag extends BirmmBaseTag { + + final String REQUEST_SIZE_TAG_OID = "20000100"; + + // 本次请求的升级包大小 + int requestSize; + + @Override + public String toString() { + return super.toString() + "[value: " + requestSize + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + requestSize = Integer.parseInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java new file mode 100644 index 0000000..0bf69fd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class SoftwareVersionTag extends BirmmBaseTag { + + final String SOFTWARE_VERSION_TAG_OID = "60000500"; + + String version; + + @Override + public String toString() { + return super.toString() + "[value: " + version + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + version = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java new file mode 100644 index 0000000..f1b5fef --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.signal; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PCITag extends BirmmBaseTag { + + final String PCI_TAG_OID = "60000511"; + + // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 + int pci; + + @Override + public String toString() { + return super.toString() + "[value: " + pci + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + pci = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java new file mode 100644 index 0000000..a7094dd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -0,0 +1,88 @@ +package com.casic.missiles.frame.tag; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +import com.casic.missiles.frame.tag.config.*; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; +import com.casic.missiles.frame.tag.signal.PCITag; +import com.casic.missiles.frame.tag.signal.RSRPTag; +import com.casic.missiles.frame.tag.signal.SNRTag; + +public class BirmmTagBuilderFactory { + + public static BirmmBaseTag createTagByOid(String oid) { + BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); + if (null != tag) { + switch (tag) { + case RETRY_TIMES_TAG: + return new RetryTimesTag(); + + case DESTINATION_IP_TAG: + return new DestIPTag(); + + case DESTINATION_PORT_TAG: + return new DestPortTag(); + + case DATE_TAG: + return new DateTag(); + + case DATETIME_TAG: + return new DateTimeTag(); + + case UPLOAD_INTERVAL_TAG: + return new UploadIntervalTag(); + + case START_TIME_TAG: + return new StartTimeTag(); + + case COLLECT_INTERVAL_TAG: + return new CollectIntervalTag(); + + case COLLECT_COUNT_TAG: + return new CollectCountTag(); + + case LOWER_LIMIT_TAG: + return new LowerLimitTag(); + + case UPPER_LIMIT_TAG: + return new UpperLimitTag(); + + case SENSOR_STATE_1_TAG: + case SENSOR_STATE_2_TAG: + case SENSOR_STATE_3_TAG: + case SENSOR_STATE_4_TAG: + case SENSOR_STATE_5_TAG: + // 传感器状态 需要根据设备类型单独处理 + return new SensorStateTag(); + + case CELL_TAG: + return new CellTag(); + + case SOFTWARE_VERSION_TAG: + return new SoftwareVersionTag(); + + case PCI_TAG: + return new PCITag(); + + case RSRP_TAG: + return new RSRPTag(); + + case SNR_TAG: + return new SNRTag(); + + default: + return null; + } + } + + // 业务上传报表 + if (oid.startsWith("C")) { + return new UploadTag(); + } + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java new file mode 100644 index 0000000..43dbb41 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java @@ -0,0 +1,25 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CellTag extends BirmmBaseTag { + + final String CELL_TAG_OID = "60000020"; + + int cellVal; + + @Override + public String toString() { + return super.toString() + "[value: " + cellVal + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + cellVal = Integer.parseInt(valueStr, 16); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java new file mode 100644 index 0000000..2514196 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java @@ -0,0 +1,33 @@ +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 java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTag extends BirmmBaseTag { + + final String DATE_TAG_OID = "10000050"; + + LocalDate date; + + @Override + public String toString() { + return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java new file mode 100644 index 0000000..a551cd5 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java @@ -0,0 +1,7 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; + +public class SensorStateTag extends BirmmBaseTag { + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java new file mode 100644 index 0000000..450a755 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadTag extends BirmmBaseTag { + + private int bizType; + private int interval; + private int startMin; + private LocalDateTime startTime; + + @Override + public String toString() { + return super.toString(); + } + + public boolean checkOid() { + long oidValue = Long.parseLong(getOid(), 16); + + // 数据类型不在范围内则返回false + bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); + if(BirmmDataBizTypeEnums.toType(bizType) == null) { + return false; + } + interval = (int) ((oidValue >> 11) & 0x7FF); + startMin = (int) (oidValue & 0x7FF); + + int hour = startMin / 60; + int minute = startMin % 60; + + startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); + + return true; + } + + public void setStartDate(String dateStr) { + LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + setStartDate(date); + } + + public void setStartDate(LocalDate date) { + startTime = startTime.withYear(date.getYear()); + startTime = startTime.withMonth(date.getMonthValue()); + startTime = startTime.withDayOfMonth(date.getDayOfMonth()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java new file mode 100644 index 0000000..6df22bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectCountTag extends BirmmBaseTag { + + final String COLLECT_COUNT_TAG_OID = "10000106"; + + // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 + int count; + + @Override + public String toString() { + return super.toString() + "[value: " + count + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + count = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java new file mode 100644 index 0000000..def754c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectIntervalTag extends BirmmBaseTag { + + final String COLLECT_INTERVAL_TAG_OID = "10000105"; + + // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java new file mode 100644 index 0000000..bcb3988 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java @@ -0,0 +1,62 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTimeTag extends BirmmBaseTag { + + final String DATETIME_TAG_OID = "10000051"; + + LocalDateTime dateTime; + + @Override + public String toString() { + return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 + + int year = dateTime.getYear() - 2000; + int month = dateTime.getMonthValue(); + int day = dateTime.getDayOfMonth(); + int hour = dateTime.getHour(); + int minute = dateTime.getMinute(); + int second = dateTime.getSecond(); + + result += String.format("%02x", year); + result += String.format("%02x", month); + result += String.format("%02x", day); + result += String.format("%02x", hour); + result += String.format("%02x", minute); + result += String.format("%02x", second); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + String hexH = valueStr.substring(6, 8); + String hexMin = valueStr.substring(8, 10); + String hexS = valueStr.substring(10, 12); + + dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), + BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); + } +} 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 new file mode 100644 index 0000000..9bb4820 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestIPTag extends BirmmBaseTag { + + final String DESTINATION_IP_TAG_OID = "10000022"; + + String ip; + + @Override + public String toString() { + return super.toString() + "[value: " + ip + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + ip = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} 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 new file mode 100644 index 0000000..ef29dca --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestPortTag extends BirmmBaseTag { + + final String DESTINATION_PORT_TAG_OID = "10000023"; + + String port; + + @Override + public String toString() { + return super.toString() + "[value: " + port + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + port = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java new file mode 100644 index 0000000..da05817 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class LowerLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000900"; + + // 单精度浮点数 + float lowerLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + lowerLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} 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 new file mode 100644 index 0000000..6d21a35 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RetryTimesTag extends BirmmBaseTag { + + final String RETRY_TIMES_TAG_OID = "1000000A"; + + // TYPE_U8整型,重传次数 1-10 + int times; + + @Override + public String toString() { + return super.toString() + "[value: " + times + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + times = Integer.parseInt(valueStr, 16); + } +} 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 new file mode 100644 index 0000000..925d162 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class StartTimeTag extends BirmmBaseTag { + + final String START_TIME_TAG_OID = "10000104"; + + // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 + int startMinute; + + @Override + public String toString() { + return super.toString() + "[value: " + startMinute + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + startMinute = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java new file mode 100644 index 0000000..f2392ee --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadIntervalTag extends BirmmBaseTag { + + final String UPLOAD_INTERVAL_TAG_OID = "10000062"; + + // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java new file mode 100644 index 0000000..a0bbe7d --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UpperLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000901"; + + // 单精度浮点数 + float upperLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + upperLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java new file mode 100644 index 0000000..9daab43 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class NeedOTATag extends BirmmBaseTag { + + final String NEED_OTA_TAG_OID = "60000600"; + + boolean need; + + @Override + public String toString() { + return super.toString() + "[value: " + need + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + need = Boolean.parseBoolean(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java new file mode 100644 index 0000000..0056fb8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageCRCTag extends BirmmBaseTag { + + final String PACKAGE_CRC_TAG_OID = "60000603"; + + String packCRC; + + @Override + public String toString() { + return super.toString() + "[value: " + packCRC + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + packCRC = valueStr; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java new file mode 100644 index 0000000..76566e0 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java @@ -0,0 +1,31 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.tomcat.util.buf.HexUtils; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageDataTag extends BirmmBaseTag { + + final String PACKAGE_DATA_TAG_OID = "60000601"; + + byte[] data; + + @Override + public String toString() { + return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID + result += String.format("%04d", data.length); // 长度 + result += HexUtils.toHexString(data); + + return result; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java new file mode 100644 index 0000000..8331ebd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageSizeTag extends BirmmBaseTag { + + final String PACKAGE_SIZE_TAG_OID = "60000602"; + + int packSize; + + @Override + public String toString() { + return super.toString() + "[value: " + packSize + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + packSize = Integer.parseInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java new file mode 100644 index 0000000..35cf112 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java @@ -0,0 +1,37 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RequestOffsetTag extends BirmmBaseTag { + + final String REQUEST_OFFSET_TAG_OID = "20000102"; + + // 本次请求的升级包偏移量 + int requestOffset; + + @Override + public String toString() { + return super.toString() + "[value: " + requestOffset + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + requestOffset = Integer.parseInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java new file mode 100644 index 0000000..50b0b72 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RequestSizeTag extends BirmmBaseTag { + + final String REQUEST_SIZE_TAG_OID = "20000100"; + + // 本次请求的升级包大小 + int requestSize; + + @Override + public String toString() { + return super.toString() + "[value: " + requestSize + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + requestSize = Integer.parseInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java new file mode 100644 index 0000000..0bf69fd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class SoftwareVersionTag extends BirmmBaseTag { + + final String SOFTWARE_VERSION_TAG_OID = "60000500"; + + String version; + + @Override + public String toString() { + return super.toString() + "[value: " + version + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + version = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java new file mode 100644 index 0000000..f1b5fef --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.signal; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PCITag extends BirmmBaseTag { + + final String PCI_TAG_OID = "60000511"; + + // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 + int pci; + + @Override + public String toString() { + return super.toString() + "[value: " + pci + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + pci = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java new file mode 100644 index 0000000..7823836 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.signal; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RSRPTag extends BirmmBaseTag { + + final String RSRP_TAG_OID = "60000513"; + + //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 + int rsrp; + + @Override + public String toString() { + return super.toString() + "[value: " + rsrp + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + rsrp = BytesUtil.hexStringToSInt(valueStr); + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java new file mode 100644 index 0000000..a7094dd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -0,0 +1,88 @@ +package com.casic.missiles.frame.tag; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +import com.casic.missiles.frame.tag.config.*; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; +import com.casic.missiles.frame.tag.signal.PCITag; +import com.casic.missiles.frame.tag.signal.RSRPTag; +import com.casic.missiles.frame.tag.signal.SNRTag; + +public class BirmmTagBuilderFactory { + + public static BirmmBaseTag createTagByOid(String oid) { + BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); + if (null != tag) { + switch (tag) { + case RETRY_TIMES_TAG: + return new RetryTimesTag(); + + case DESTINATION_IP_TAG: + return new DestIPTag(); + + case DESTINATION_PORT_TAG: + return new DestPortTag(); + + case DATE_TAG: + return new DateTag(); + + case DATETIME_TAG: + return new DateTimeTag(); + + case UPLOAD_INTERVAL_TAG: + return new UploadIntervalTag(); + + case START_TIME_TAG: + return new StartTimeTag(); + + case COLLECT_INTERVAL_TAG: + return new CollectIntervalTag(); + + case COLLECT_COUNT_TAG: + return new CollectCountTag(); + + case LOWER_LIMIT_TAG: + return new LowerLimitTag(); + + case UPPER_LIMIT_TAG: + return new UpperLimitTag(); + + case SENSOR_STATE_1_TAG: + case SENSOR_STATE_2_TAG: + case SENSOR_STATE_3_TAG: + case SENSOR_STATE_4_TAG: + case SENSOR_STATE_5_TAG: + // 传感器状态 需要根据设备类型单独处理 + return new SensorStateTag(); + + case CELL_TAG: + return new CellTag(); + + case SOFTWARE_VERSION_TAG: + return new SoftwareVersionTag(); + + case PCI_TAG: + return new PCITag(); + + case RSRP_TAG: + return new RSRPTag(); + + case SNR_TAG: + return new SNRTag(); + + default: + return null; + } + } + + // 业务上传报表 + if (oid.startsWith("C")) { + return new UploadTag(); + } + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java new file mode 100644 index 0000000..43dbb41 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java @@ -0,0 +1,25 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CellTag extends BirmmBaseTag { + + final String CELL_TAG_OID = "60000020"; + + int cellVal; + + @Override + public String toString() { + return super.toString() + "[value: " + cellVal + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + cellVal = Integer.parseInt(valueStr, 16); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java new file mode 100644 index 0000000..2514196 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java @@ -0,0 +1,33 @@ +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 java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTag extends BirmmBaseTag { + + final String DATE_TAG_OID = "10000050"; + + LocalDate date; + + @Override + public String toString() { + return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java new file mode 100644 index 0000000..a551cd5 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java @@ -0,0 +1,7 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; + +public class SensorStateTag extends BirmmBaseTag { + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java new file mode 100644 index 0000000..450a755 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadTag extends BirmmBaseTag { + + private int bizType; + private int interval; + private int startMin; + private LocalDateTime startTime; + + @Override + public String toString() { + return super.toString(); + } + + public boolean checkOid() { + long oidValue = Long.parseLong(getOid(), 16); + + // 数据类型不在范围内则返回false + bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); + if(BirmmDataBizTypeEnums.toType(bizType) == null) { + return false; + } + interval = (int) ((oidValue >> 11) & 0x7FF); + startMin = (int) (oidValue & 0x7FF); + + int hour = startMin / 60; + int minute = startMin % 60; + + startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); + + return true; + } + + public void setStartDate(String dateStr) { + LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + setStartDate(date); + } + + public void setStartDate(LocalDate date) { + startTime = startTime.withYear(date.getYear()); + startTime = startTime.withMonth(date.getMonthValue()); + startTime = startTime.withDayOfMonth(date.getDayOfMonth()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java new file mode 100644 index 0000000..6df22bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectCountTag extends BirmmBaseTag { + + final String COLLECT_COUNT_TAG_OID = "10000106"; + + // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 + int count; + + @Override + public String toString() { + return super.toString() + "[value: " + count + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + count = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java new file mode 100644 index 0000000..def754c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectIntervalTag extends BirmmBaseTag { + + final String COLLECT_INTERVAL_TAG_OID = "10000105"; + + // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java new file mode 100644 index 0000000..bcb3988 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java @@ -0,0 +1,62 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTimeTag extends BirmmBaseTag { + + final String DATETIME_TAG_OID = "10000051"; + + LocalDateTime dateTime; + + @Override + public String toString() { + return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 + + int year = dateTime.getYear() - 2000; + int month = dateTime.getMonthValue(); + int day = dateTime.getDayOfMonth(); + int hour = dateTime.getHour(); + int minute = dateTime.getMinute(); + int second = dateTime.getSecond(); + + result += String.format("%02x", year); + result += String.format("%02x", month); + result += String.format("%02x", day); + result += String.format("%02x", hour); + result += String.format("%02x", minute); + result += String.format("%02x", second); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + String hexH = valueStr.substring(6, 8); + String hexMin = valueStr.substring(8, 10); + String hexS = valueStr.substring(10, 12); + + dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), + BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); + } +} 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 new file mode 100644 index 0000000..9bb4820 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestIPTag extends BirmmBaseTag { + + final String DESTINATION_IP_TAG_OID = "10000022"; + + String ip; + + @Override + public String toString() { + return super.toString() + "[value: " + ip + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + ip = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} 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 new file mode 100644 index 0000000..ef29dca --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestPortTag extends BirmmBaseTag { + + final String DESTINATION_PORT_TAG_OID = "10000023"; + + String port; + + @Override + public String toString() { + return super.toString() + "[value: " + port + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + port = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java new file mode 100644 index 0000000..da05817 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class LowerLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000900"; + + // 单精度浮点数 + float lowerLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + lowerLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} 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 new file mode 100644 index 0000000..6d21a35 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RetryTimesTag extends BirmmBaseTag { + + final String RETRY_TIMES_TAG_OID = "1000000A"; + + // TYPE_U8整型,重传次数 1-10 + int times; + + @Override + public String toString() { + return super.toString() + "[value: " + times + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + times = Integer.parseInt(valueStr, 16); + } +} 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 new file mode 100644 index 0000000..925d162 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class StartTimeTag extends BirmmBaseTag { + + final String START_TIME_TAG_OID = "10000104"; + + // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 + int startMinute; + + @Override + public String toString() { + return super.toString() + "[value: " + startMinute + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + startMinute = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java new file mode 100644 index 0000000..f2392ee --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadIntervalTag extends BirmmBaseTag { + + final String UPLOAD_INTERVAL_TAG_OID = "10000062"; + + // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java new file mode 100644 index 0000000..a0bbe7d --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UpperLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000901"; + + // 单精度浮点数 + float upperLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + upperLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java new file mode 100644 index 0000000..9daab43 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class NeedOTATag extends BirmmBaseTag { + + final String NEED_OTA_TAG_OID = "60000600"; + + boolean need; + + @Override + public String toString() { + return super.toString() + "[value: " + need + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + need = Boolean.parseBoolean(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java new file mode 100644 index 0000000..0056fb8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageCRCTag extends BirmmBaseTag { + + final String PACKAGE_CRC_TAG_OID = "60000603"; + + String packCRC; + + @Override + public String toString() { + return super.toString() + "[value: " + packCRC + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + packCRC = valueStr; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java new file mode 100644 index 0000000..76566e0 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java @@ -0,0 +1,31 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.tomcat.util.buf.HexUtils; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageDataTag extends BirmmBaseTag { + + final String PACKAGE_DATA_TAG_OID = "60000601"; + + byte[] data; + + @Override + public String toString() { + return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID + result += String.format("%04d", data.length); // 长度 + result += HexUtils.toHexString(data); + + return result; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java new file mode 100644 index 0000000..8331ebd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageSizeTag extends BirmmBaseTag { + + final String PACKAGE_SIZE_TAG_OID = "60000602"; + + int packSize; + + @Override + public String toString() { + return super.toString() + "[value: " + packSize + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + packSize = Integer.parseInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java new file mode 100644 index 0000000..35cf112 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java @@ -0,0 +1,37 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RequestOffsetTag extends BirmmBaseTag { + + final String REQUEST_OFFSET_TAG_OID = "20000102"; + + // 本次请求的升级包偏移量 + int requestOffset; + + @Override + public String toString() { + return super.toString() + "[value: " + requestOffset + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + requestOffset = Integer.parseInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java new file mode 100644 index 0000000..50b0b72 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RequestSizeTag extends BirmmBaseTag { + + final String REQUEST_SIZE_TAG_OID = "20000100"; + + // 本次请求的升级包大小 + int requestSize; + + @Override + public String toString() { + return super.toString() + "[value: " + requestSize + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + requestSize = Integer.parseInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java new file mode 100644 index 0000000..0bf69fd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class SoftwareVersionTag extends BirmmBaseTag { + + final String SOFTWARE_VERSION_TAG_OID = "60000500"; + + String version; + + @Override + public String toString() { + return super.toString() + "[value: " + version + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + version = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java new file mode 100644 index 0000000..f1b5fef --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.signal; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PCITag extends BirmmBaseTag { + + final String PCI_TAG_OID = "60000511"; + + // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 + int pci; + + @Override + public String toString() { + return super.toString() + "[value: " + pci + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + pci = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java new file mode 100644 index 0000000..7823836 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.signal; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RSRPTag extends BirmmBaseTag { + + final String RSRP_TAG_OID = "60000513"; + + //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 + int rsrp; + + @Override + public String toString() { + return super.toString() + "[value: " + rsrp + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + rsrp = BytesUtil.hexStringToSInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java new file mode 100644 index 0000000..a5d283f --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.signal; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class SNRTag extends BirmmBaseTag { + + final String SNR_TAG_OID = "60000516"; + + //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 + int snr; + + @Override + public String toString() { + return super.toString() + "[value: " + snr + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + snr = BytesUtil.hexStringToSInt(valueStr); + } +} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@ + com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java new file mode 100644 index 0000000..a7094dd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -0,0 +1,88 @@ +package com.casic.missiles.frame.tag; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +import com.casic.missiles.frame.tag.config.*; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; +import com.casic.missiles.frame.tag.signal.PCITag; +import com.casic.missiles.frame.tag.signal.RSRPTag; +import com.casic.missiles.frame.tag.signal.SNRTag; + +public class BirmmTagBuilderFactory { + + public static BirmmBaseTag createTagByOid(String oid) { + BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); + if (null != tag) { + switch (tag) { + case RETRY_TIMES_TAG: + return new RetryTimesTag(); + + case DESTINATION_IP_TAG: + return new DestIPTag(); + + case DESTINATION_PORT_TAG: + return new DestPortTag(); + + case DATE_TAG: + return new DateTag(); + + case DATETIME_TAG: + return new DateTimeTag(); + + case UPLOAD_INTERVAL_TAG: + return new UploadIntervalTag(); + + case START_TIME_TAG: + return new StartTimeTag(); + + case COLLECT_INTERVAL_TAG: + return new CollectIntervalTag(); + + case COLLECT_COUNT_TAG: + return new CollectCountTag(); + + case LOWER_LIMIT_TAG: + return new LowerLimitTag(); + + case UPPER_LIMIT_TAG: + return new UpperLimitTag(); + + case SENSOR_STATE_1_TAG: + case SENSOR_STATE_2_TAG: + case SENSOR_STATE_3_TAG: + case SENSOR_STATE_4_TAG: + case SENSOR_STATE_5_TAG: + // 传感器状态 需要根据设备类型单独处理 + return new SensorStateTag(); + + case CELL_TAG: + return new CellTag(); + + case SOFTWARE_VERSION_TAG: + return new SoftwareVersionTag(); + + case PCI_TAG: + return new PCITag(); + + case RSRP_TAG: + return new RSRPTag(); + + case SNR_TAG: + return new SNRTag(); + + default: + return null; + } + } + + // 业务上传报表 + if (oid.startsWith("C")) { + return new UploadTag(); + } + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java new file mode 100644 index 0000000..43dbb41 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java @@ -0,0 +1,25 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CellTag extends BirmmBaseTag { + + final String CELL_TAG_OID = "60000020"; + + int cellVal; + + @Override + public String toString() { + return super.toString() + "[value: " + cellVal + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + cellVal = Integer.parseInt(valueStr, 16); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java new file mode 100644 index 0000000..2514196 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java @@ -0,0 +1,33 @@ +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 java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTag extends BirmmBaseTag { + + final String DATE_TAG_OID = "10000050"; + + LocalDate date; + + @Override + public String toString() { + return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java new file mode 100644 index 0000000..a551cd5 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java @@ -0,0 +1,7 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; + +public class SensorStateTag extends BirmmBaseTag { + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java new file mode 100644 index 0000000..450a755 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadTag extends BirmmBaseTag { + + private int bizType; + private int interval; + private int startMin; + private LocalDateTime startTime; + + @Override + public String toString() { + return super.toString(); + } + + public boolean checkOid() { + long oidValue = Long.parseLong(getOid(), 16); + + // 数据类型不在范围内则返回false + bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); + if(BirmmDataBizTypeEnums.toType(bizType) == null) { + return false; + } + interval = (int) ((oidValue >> 11) & 0x7FF); + startMin = (int) (oidValue & 0x7FF); + + int hour = startMin / 60; + int minute = startMin % 60; + + startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); + + return true; + } + + public void setStartDate(String dateStr) { + LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + setStartDate(date); + } + + public void setStartDate(LocalDate date) { + startTime = startTime.withYear(date.getYear()); + startTime = startTime.withMonth(date.getMonthValue()); + startTime = startTime.withDayOfMonth(date.getDayOfMonth()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java new file mode 100644 index 0000000..6df22bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectCountTag extends BirmmBaseTag { + + final String COLLECT_COUNT_TAG_OID = "10000106"; + + // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 + int count; + + @Override + public String toString() { + return super.toString() + "[value: " + count + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + count = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java new file mode 100644 index 0000000..def754c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectIntervalTag extends BirmmBaseTag { + + final String COLLECT_INTERVAL_TAG_OID = "10000105"; + + // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java new file mode 100644 index 0000000..bcb3988 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java @@ -0,0 +1,62 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTimeTag extends BirmmBaseTag { + + final String DATETIME_TAG_OID = "10000051"; + + LocalDateTime dateTime; + + @Override + public String toString() { + return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 + + int year = dateTime.getYear() - 2000; + int month = dateTime.getMonthValue(); + int day = dateTime.getDayOfMonth(); + int hour = dateTime.getHour(); + int minute = dateTime.getMinute(); + int second = dateTime.getSecond(); + + result += String.format("%02x", year); + result += String.format("%02x", month); + result += String.format("%02x", day); + result += String.format("%02x", hour); + result += String.format("%02x", minute); + result += String.format("%02x", second); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + String hexH = valueStr.substring(6, 8); + String hexMin = valueStr.substring(8, 10); + String hexS = valueStr.substring(10, 12); + + dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), + BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); + } +} 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 new file mode 100644 index 0000000..9bb4820 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestIPTag extends BirmmBaseTag { + + final String DESTINATION_IP_TAG_OID = "10000022"; + + String ip; + + @Override + public String toString() { + return super.toString() + "[value: " + ip + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + ip = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} 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 new file mode 100644 index 0000000..ef29dca --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestPortTag extends BirmmBaseTag { + + final String DESTINATION_PORT_TAG_OID = "10000023"; + + String port; + + @Override + public String toString() { + return super.toString() + "[value: " + port + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + port = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java new file mode 100644 index 0000000..da05817 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class LowerLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000900"; + + // 单精度浮点数 + float lowerLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + lowerLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} 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 new file mode 100644 index 0000000..6d21a35 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RetryTimesTag extends BirmmBaseTag { + + final String RETRY_TIMES_TAG_OID = "1000000A"; + + // TYPE_U8整型,重传次数 1-10 + int times; + + @Override + public String toString() { + return super.toString() + "[value: " + times + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + times = Integer.parseInt(valueStr, 16); + } +} 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 new file mode 100644 index 0000000..925d162 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class StartTimeTag extends BirmmBaseTag { + + final String START_TIME_TAG_OID = "10000104"; + + // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 + int startMinute; + + @Override + public String toString() { + return super.toString() + "[value: " + startMinute + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + startMinute = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java new file mode 100644 index 0000000..f2392ee --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadIntervalTag extends BirmmBaseTag { + + final String UPLOAD_INTERVAL_TAG_OID = "10000062"; + + // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java new file mode 100644 index 0000000..a0bbe7d --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UpperLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000901"; + + // 单精度浮点数 + float upperLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + upperLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java new file mode 100644 index 0000000..9daab43 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class NeedOTATag extends BirmmBaseTag { + + final String NEED_OTA_TAG_OID = "60000600"; + + boolean need; + + @Override + public String toString() { + return super.toString() + "[value: " + need + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + need = Boolean.parseBoolean(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java new file mode 100644 index 0000000..0056fb8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageCRCTag extends BirmmBaseTag { + + final String PACKAGE_CRC_TAG_OID = "60000603"; + + String packCRC; + + @Override + public String toString() { + return super.toString() + "[value: " + packCRC + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + packCRC = valueStr; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java new file mode 100644 index 0000000..76566e0 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java @@ -0,0 +1,31 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.tomcat.util.buf.HexUtils; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageDataTag extends BirmmBaseTag { + + final String PACKAGE_DATA_TAG_OID = "60000601"; + + byte[] data; + + @Override + public String toString() { + return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID + result += String.format("%04d", data.length); // 长度 + result += HexUtils.toHexString(data); + + return result; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java new file mode 100644 index 0000000..8331ebd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageSizeTag extends BirmmBaseTag { + + final String PACKAGE_SIZE_TAG_OID = "60000602"; + + int packSize; + + @Override + public String toString() { + return super.toString() + "[value: " + packSize + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + packSize = Integer.parseInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java new file mode 100644 index 0000000..35cf112 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java @@ -0,0 +1,37 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RequestOffsetTag extends BirmmBaseTag { + + final String REQUEST_OFFSET_TAG_OID = "20000102"; + + // 本次请求的升级包偏移量 + int requestOffset; + + @Override + public String toString() { + return super.toString() + "[value: " + requestOffset + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + requestOffset = Integer.parseInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java new file mode 100644 index 0000000..50b0b72 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RequestSizeTag extends BirmmBaseTag { + + final String REQUEST_SIZE_TAG_OID = "20000100"; + + // 本次请求的升级包大小 + int requestSize; + + @Override + public String toString() { + return super.toString() + "[value: " + requestSize + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + requestSize = Integer.parseInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java new file mode 100644 index 0000000..0bf69fd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class SoftwareVersionTag extends BirmmBaseTag { + + final String SOFTWARE_VERSION_TAG_OID = "60000500"; + + String version; + + @Override + public String toString() { + return super.toString() + "[value: " + version + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + version = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java new file mode 100644 index 0000000..f1b5fef --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.signal; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PCITag extends BirmmBaseTag { + + final String PCI_TAG_OID = "60000511"; + + // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 + int pci; + + @Override + public String toString() { + return super.toString() + "[value: " + pci + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + pci = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java new file mode 100644 index 0000000..7823836 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.signal; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RSRPTag extends BirmmBaseTag { + + final String RSRP_TAG_OID = "60000513"; + + //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 + int rsrp; + + @Override + public String toString() { + return super.toString() + "[value: " + rsrp + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + rsrp = BytesUtil.hexStringToSInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java new file mode 100644 index 0000000..a5d283f --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.signal; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class SNRTag extends BirmmBaseTag { + + final String SNR_TAG_OID = "60000516"; + + //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 + int snr; + + @Override + public String toString() { + return super.toString() + "[value: " + snr + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + snr = BytesUtil.hexStringToSInt(valueStr); + } +} diff --git a/sensorhub-support/pom.xml b/sensorhub-support/pom.xml index abc3dda..cc12975 100644 --- a/sensorhub-support/pom.xml +++ b/sensorhub-support/pom.xml @@ -12,6 +12,11 @@ sensorhub-support + + com.casic + casic-iot-model + 1.0.0-SNAPSHOT + org.springframework.boot diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@
+ com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java new file mode 100644 index 0000000..a7094dd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -0,0 +1,88 @@ +package com.casic.missiles.frame.tag; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +import com.casic.missiles.frame.tag.config.*; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; +import com.casic.missiles.frame.tag.signal.PCITag; +import com.casic.missiles.frame.tag.signal.RSRPTag; +import com.casic.missiles.frame.tag.signal.SNRTag; + +public class BirmmTagBuilderFactory { + + public static BirmmBaseTag createTagByOid(String oid) { + BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); + if (null != tag) { + switch (tag) { + case RETRY_TIMES_TAG: + return new RetryTimesTag(); + + case DESTINATION_IP_TAG: + return new DestIPTag(); + + case DESTINATION_PORT_TAG: + return new DestPortTag(); + + case DATE_TAG: + return new DateTag(); + + case DATETIME_TAG: + return new DateTimeTag(); + + case UPLOAD_INTERVAL_TAG: + return new UploadIntervalTag(); + + case START_TIME_TAG: + return new StartTimeTag(); + + case COLLECT_INTERVAL_TAG: + return new CollectIntervalTag(); + + case COLLECT_COUNT_TAG: + return new CollectCountTag(); + + case LOWER_LIMIT_TAG: + return new LowerLimitTag(); + + case UPPER_LIMIT_TAG: + return new UpperLimitTag(); + + case SENSOR_STATE_1_TAG: + case SENSOR_STATE_2_TAG: + case SENSOR_STATE_3_TAG: + case SENSOR_STATE_4_TAG: + case SENSOR_STATE_5_TAG: + // 传感器状态 需要根据设备类型单独处理 + return new SensorStateTag(); + + case CELL_TAG: + return new CellTag(); + + case SOFTWARE_VERSION_TAG: + return new SoftwareVersionTag(); + + case PCI_TAG: + return new PCITag(); + + case RSRP_TAG: + return new RSRPTag(); + + case SNR_TAG: + return new SNRTag(); + + default: + return null; + } + } + + // 业务上传报表 + if (oid.startsWith("C")) { + return new UploadTag(); + } + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java new file mode 100644 index 0000000..43dbb41 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java @@ -0,0 +1,25 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CellTag extends BirmmBaseTag { + + final String CELL_TAG_OID = "60000020"; + + int cellVal; + + @Override + public String toString() { + return super.toString() + "[value: " + cellVal + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + cellVal = Integer.parseInt(valueStr, 16); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java new file mode 100644 index 0000000..2514196 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java @@ -0,0 +1,33 @@ +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 java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTag extends BirmmBaseTag { + + final String DATE_TAG_OID = "10000050"; + + LocalDate date; + + @Override + public String toString() { + return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java new file mode 100644 index 0000000..a551cd5 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java @@ -0,0 +1,7 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; + +public class SensorStateTag extends BirmmBaseTag { + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java new file mode 100644 index 0000000..450a755 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadTag extends BirmmBaseTag { + + private int bizType; + private int interval; + private int startMin; + private LocalDateTime startTime; + + @Override + public String toString() { + return super.toString(); + } + + public boolean checkOid() { + long oidValue = Long.parseLong(getOid(), 16); + + // 数据类型不在范围内则返回false + bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); + if(BirmmDataBizTypeEnums.toType(bizType) == null) { + return false; + } + interval = (int) ((oidValue >> 11) & 0x7FF); + startMin = (int) (oidValue & 0x7FF); + + int hour = startMin / 60; + int minute = startMin % 60; + + startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); + + return true; + } + + public void setStartDate(String dateStr) { + LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + setStartDate(date); + } + + public void setStartDate(LocalDate date) { + startTime = startTime.withYear(date.getYear()); + startTime = startTime.withMonth(date.getMonthValue()); + startTime = startTime.withDayOfMonth(date.getDayOfMonth()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java new file mode 100644 index 0000000..6df22bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectCountTag extends BirmmBaseTag { + + final String COLLECT_COUNT_TAG_OID = "10000106"; + + // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 + int count; + + @Override + public String toString() { + return super.toString() + "[value: " + count + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + count = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java new file mode 100644 index 0000000..def754c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectIntervalTag extends BirmmBaseTag { + + final String COLLECT_INTERVAL_TAG_OID = "10000105"; + + // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java new file mode 100644 index 0000000..bcb3988 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java @@ -0,0 +1,62 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTimeTag extends BirmmBaseTag { + + final String DATETIME_TAG_OID = "10000051"; + + LocalDateTime dateTime; + + @Override + public String toString() { + return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 + + int year = dateTime.getYear() - 2000; + int month = dateTime.getMonthValue(); + int day = dateTime.getDayOfMonth(); + int hour = dateTime.getHour(); + int minute = dateTime.getMinute(); + int second = dateTime.getSecond(); + + result += String.format("%02x", year); + result += String.format("%02x", month); + result += String.format("%02x", day); + result += String.format("%02x", hour); + result += String.format("%02x", minute); + result += String.format("%02x", second); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + String hexH = valueStr.substring(6, 8); + String hexMin = valueStr.substring(8, 10); + String hexS = valueStr.substring(10, 12); + + dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), + BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); + } +} 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 new file mode 100644 index 0000000..9bb4820 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestIPTag extends BirmmBaseTag { + + final String DESTINATION_IP_TAG_OID = "10000022"; + + String ip; + + @Override + public String toString() { + return super.toString() + "[value: " + ip + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + ip = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} 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 new file mode 100644 index 0000000..ef29dca --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestPortTag extends BirmmBaseTag { + + final String DESTINATION_PORT_TAG_OID = "10000023"; + + String port; + + @Override + public String toString() { + return super.toString() + "[value: " + port + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + port = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java new file mode 100644 index 0000000..da05817 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class LowerLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000900"; + + // 单精度浮点数 + float lowerLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + lowerLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} 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 new file mode 100644 index 0000000..6d21a35 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RetryTimesTag extends BirmmBaseTag { + + final String RETRY_TIMES_TAG_OID = "1000000A"; + + // TYPE_U8整型,重传次数 1-10 + int times; + + @Override + public String toString() { + return super.toString() + "[value: " + times + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + times = Integer.parseInt(valueStr, 16); + } +} 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 new file mode 100644 index 0000000..925d162 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class StartTimeTag extends BirmmBaseTag { + + final String START_TIME_TAG_OID = "10000104"; + + // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 + int startMinute; + + @Override + public String toString() { + return super.toString() + "[value: " + startMinute + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + startMinute = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java new file mode 100644 index 0000000..f2392ee --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadIntervalTag extends BirmmBaseTag { + + final String UPLOAD_INTERVAL_TAG_OID = "10000062"; + + // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java new file mode 100644 index 0000000..a0bbe7d --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UpperLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000901"; + + // 单精度浮点数 + float upperLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + upperLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java new file mode 100644 index 0000000..9daab43 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class NeedOTATag extends BirmmBaseTag { + + final String NEED_OTA_TAG_OID = "60000600"; + + boolean need; + + @Override + public String toString() { + return super.toString() + "[value: " + need + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + need = Boolean.parseBoolean(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java new file mode 100644 index 0000000..0056fb8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageCRCTag extends BirmmBaseTag { + + final String PACKAGE_CRC_TAG_OID = "60000603"; + + String packCRC; + + @Override + public String toString() { + return super.toString() + "[value: " + packCRC + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + packCRC = valueStr; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java new file mode 100644 index 0000000..76566e0 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java @@ -0,0 +1,31 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.tomcat.util.buf.HexUtils; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageDataTag extends BirmmBaseTag { + + final String PACKAGE_DATA_TAG_OID = "60000601"; + + byte[] data; + + @Override + public String toString() { + return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID + result += String.format("%04d", data.length); // 长度 + result += HexUtils.toHexString(data); + + return result; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java new file mode 100644 index 0000000..8331ebd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageSizeTag extends BirmmBaseTag { + + final String PACKAGE_SIZE_TAG_OID = "60000602"; + + int packSize; + + @Override + public String toString() { + return super.toString() + "[value: " + packSize + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + packSize = Integer.parseInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java new file mode 100644 index 0000000..35cf112 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java @@ -0,0 +1,37 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RequestOffsetTag extends BirmmBaseTag { + + final String REQUEST_OFFSET_TAG_OID = "20000102"; + + // 本次请求的升级包偏移量 + int requestOffset; + + @Override + public String toString() { + return super.toString() + "[value: " + requestOffset + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + requestOffset = Integer.parseInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java new file mode 100644 index 0000000..50b0b72 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RequestSizeTag extends BirmmBaseTag { + + final String REQUEST_SIZE_TAG_OID = "20000100"; + + // 本次请求的升级包大小 + int requestSize; + + @Override + public String toString() { + return super.toString() + "[value: " + requestSize + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + requestSize = Integer.parseInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java new file mode 100644 index 0000000..0bf69fd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class SoftwareVersionTag extends BirmmBaseTag { + + final String SOFTWARE_VERSION_TAG_OID = "60000500"; + + String version; + + @Override + public String toString() { + return super.toString() + "[value: " + version + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + version = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java new file mode 100644 index 0000000..f1b5fef --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.signal; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PCITag extends BirmmBaseTag { + + final String PCI_TAG_OID = "60000511"; + + // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 + int pci; + + @Override + public String toString() { + return super.toString() + "[value: " + pci + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + pci = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java new file mode 100644 index 0000000..7823836 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.signal; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RSRPTag extends BirmmBaseTag { + + final String RSRP_TAG_OID = "60000513"; + + //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 + int rsrp; + + @Override + public String toString() { + return super.toString() + "[value: " + rsrp + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + rsrp = BytesUtil.hexStringToSInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java new file mode 100644 index 0000000..a5d283f --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.signal; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class SNRTag extends BirmmBaseTag { + + final String SNR_TAG_OID = "60000516"; + + //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 + int snr; + + @Override + public String toString() { + return super.toString() + "[value: " + snr + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + snr = BytesUtil.hexStringToSInt(valueStr); + } +} diff --git a/sensorhub-support/pom.xml b/sensorhub-support/pom.xml index abc3dda..cc12975 100644 --- a/sensorhub-support/pom.xml +++ b/sensorhub-support/pom.xml @@ -12,6 +12,11 @@ sensorhub-support + + com.casic + casic-iot-model + 1.0.0-SNAPSHOT + org.springframework.boot diff --git a/sensorhub-support/src/main/java/com/casic/missiles/config/AepConfig.java b/sensorhub-support/src/main/java/com/casic/missiles/config/AepConfig.java deleted file mode 100644 index 844d5dc..0000000 --- a/sensorhub-support/src/main/java/com/casic/missiles/config/AepConfig.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@Data -@Configuration -@ConfigurationProperties(prefix = "sensorhub.aep") -public class AepConfig { - - private String key = "ke4zM3hld29"; - private String secret = "35ykNutA1t"; - private String paramMasterKey = "0a77886fae4f4ff68d926adeb3a3ef5b"; - private Integer ttl; - private String operator; - -} diff --git a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java index 21187b2..7637652 100644 --- a/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java +++ b/casic-iot-dao/src/main/java/com/casic/missiles/mapper/DeviceMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -25,4 +26,6 @@ @Param("request") DeviceListRequest request, @Param("dataScope") DataScope dataScope); + List listCtnbByDevCode(@Param("devCode") String devCode); + } diff --git a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml index 2c99706..028dd64 100644 --- a/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml +++ b/casic-iot-dao/src/main/resources/mapper/DeviceMapper.xml @@ -85,4 +85,13 @@ order by create_time desc + + diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java new file mode 100644 index 0000000..861130b --- /dev/null +++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/device/DeviceCtnbDTO.java @@ -0,0 +1,143 @@ +package com.casic.missiles.dto.device; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.enums.DictCodeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + *

+ * 设备基本信息表 + *

+ * + * @author cz + * @since 2023-11-22 + */ +@Data +@ApiModel +@TableName("device") +public class DeviceCtnbDTO implements Serializable, DictCodeEnum { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId("id") + private Long id; + + /** + * 分组id + */ + @TableField("group_id") + @ApiModelProperty(value = "分组id", dataType = "Long") + private Long groupId; + + /** + * 产品id + */ + @TableField("product_id") + @ApiModelProperty(value = "产品id", dataType = "Long") + private Long productId; + + /** + * 设备编号 + */ + @TableField("devcode") + @ApiModelProperty(value = "设备编号", dataType = "String") + private String devcode; + + /** + * 设备类型 + */ + @ApiModelProperty(value = "设备类型(字典值)", dataType = "Integer") + @DictCodeField(message = "设备类型不合法", cacheName = DEVICE_TYPE) + @TableField("device_type") + private Integer deviceType; + + @ApiModelProperty(value = "设备类型", dataType = "String") + @TableField(exist = false) + private String deviceTypeName; + + /** + * 设备型号 + */ + @TableField("model") + @ApiModelProperty(value = "设备型号(字典值)", dataType = "Integer") + @DictCodeField(message = "设备型号不合法", cacheName = DEVICE_TYPE) + private Integer model; + + @ApiModelProperty(value = "设备型号", dataType = "String") + @TableField(exist = false) + private String modelName; + + /** + * 名称 + */ + @TableField("name") + @ApiModelProperty(value = "名称", dataType = "String") + private String name; + + /** + * 设备在线状态 0在线/1离线 + */ + @TableField("status") + @ApiModelProperty(value = "设备在线状态 1在线/0离线", dataType = "Integer") + private Integer status; + + /** + * 设备imei号 + */ + @TableField("imei") + @ApiModelProperty(value = "设备imei号", dataType = "String") + private String imei; + + /** + * 设备imei号 + */ + @TableField("iccid") + @ApiModelProperty(value = "设备iccid号", dataType = "String") + private String iccid; + + /** + * 逻辑删除 + */ + @TableField("valid") + private Integer valid; + + /** + * 版本 + */ + @TableField("version") + private String version; + + /** + * 加密密钥 + */ + @TableField("sm4_key") + private String sm4Key; + + /** + * 电信NB平台设备id + */ + @TableField("ctnb_device_id") + private String ctnbDeviceId; + + /** + * 电信NB平台所属产品id + */ + @TableField("ctnb_product_id") + private String ctnbProductId; + + /** + * 电信NB平台masterAPIKey + */ + @TableField("ctnb_master_key") + private String ctnbMasterKey; +} 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 23564c6..9890ba6 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 @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -31,7 +32,9 @@ ReturnDTO deleteDevice(List ids); - Device deviceDetail(Long id) throws Exception; + Device deviceDetail(Long id) throws Exception; + + DeviceCtnbDTO getCtnbViewByDevCode(String devCode); void importiFile(MultipartFile file) throws IOException; 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 cbecebc..102f9fc 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +14,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.device.DeviceCtnbDTO; import com.casic.missiles.dto.device.DeviceListRequest; import com.casic.missiles.dto.device.DeviceListVO; import com.casic.missiles.dto.device.ImportDeviceDTO; @@ -37,6 +39,7 @@ import java.io.IOException; import java.io.InputStream; +import java.sql.Wrapper; import java.util.*; import java.util.stream.Collectors; @@ -109,12 +112,18 @@ @Override public Device deviceDetail(Long id) throws Exception { - Device device=this.baseMapper.selectById(id); + Device device = this.baseMapper.selectById(id); DictCodeUtils.convertDictCodeToName(device); return device; } @Override + public DeviceCtnbDTO getCtnbViewByDevCode(String devCode) { + List tmpList = this.baseMapper.listCtnbByDevCode(devCode); + return tmpList.isEmpty() ? null : tmpList.get(0); + } + + @Override public void importiFile(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); //保证登录账号、部门id正确 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 85ce8e4..8a8f80d 100644 --- a/casic-iot-web/src/main/resources/config/application-dev.yml +++ b/casic-iot-web/src/main/resources/config/application-dev.yml @@ -16,13 +16,13 @@ url: jdbc:mysql://111.198.10.15:11336/casic_iot?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false sensorhub: #实现动态的双库操作,暂时不想合并 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://111.198.10.15:11336/casic_sensorhub?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&&useSSL=true username: root password: Casic203 - use-ping-method: false +# use-ping-method: false session: store-type: redis redis: diff --git a/casic-iot-web/src/main/resources/config/application.yml b/casic-iot-web/src/main/resources/config/application.yml index 3ac4de7..910a176 100644 --- a/casic-iot-web/src/main/resources/config/application.yml +++ b/casic-iot-web/src/main/resources/config/application.yml @@ -76,8 +76,10 @@ aep: key: "ke4zM3hld29" secret: "35ykNutA1t" - paramMasterKey: "0a77886fae4f4ff68d926adeb3a3ef5b" + time-url: "https://2000035757.api.ctwing.cn/echo" + base-url: "https://2000035757.api.ctwing.cn" ttl: 7200 + level: 1 operator: "birmm" #代码生成器配置 diff --git a/pom.xml b/pom.xml index c260019..03cc680 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ sensorhub-core sensorhub-support + sensorhub-service-birmm casic-iot-web casic-iot-common casic-iot-model diff --git a/sensorhub-core/lib/ag-sdk-biz.jar b/sensorhub-core/lib/ag-sdk-biz.jar deleted file mode 100644 index dcc3422..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ag-sdk-biz.pom.xml b/sensorhub-core/lib/ag-sdk-biz.pom.xml deleted file mode 100644 index 1e263af..0000000 --- a/sensorhub-core/lib/ag-sdk-biz.pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.ctg.ag - ag-sdk-biz-110107.tar.gz - 20240131.111227-SNAPSHOT - - src - - - maven-compiler-plugin - 3.5.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - - - - com.ctg.ag - ctg-ag-sdk-core - 0.0.0 - - - \ No newline at end of file diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar deleted file mode 100644 index 7c67925..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.jar +++ /dev/null Binary files differ diff --git a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml b/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml deleted file mode 100644 index ae36b03..0000000 --- a/sensorhub-core/lib/ctg-ag-sdk-core-2.8.0.pom.xml +++ /dev/null @@ -1 +0,0 @@ -No available sdk core pom.xml \ No newline at end of file diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml index da561cd..5c91fc7 100644 --- a/sensorhub-core/pom.xml +++ b/sensorhub-core/pom.xml @@ -27,26 +27,32 @@
+ com.casic + sensorhub-service-birmm + 1.0.0-SNAPSHOT + + + net.jodah expiringmap 0.5.8 - - com.ctg.ag - ctg-ag-sdk-core - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ctg-ag-sdk-core-2.8.0.jar - + + + + + + + - - com.ctg.ag - ag-sdk-biz - 2.8.0-SNAPSHOT - system - ${pom.basedir}\lib\ag-sdk-biz.jar - + + + + + + + cn.hutool diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java deleted file mode 100644 index 59f83f4..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/AepCommandSend.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.casic.missiles.controller; - - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; -import com.casic.missiles.config.AepConfig; -import com.casic.missiles.enums.aep.AepCommandEnum; -import com.casic.missiles.parser.SensorhubDecoder; -import com.casic.missiles.pojo.BusConfigParam; -import com.casic.missiles.pojo.ParseResult; -import com.casic.missiles.replier.command.AbstractBuildReplyCommand; -import com.casic.missiles.replier.command.DefaultReplyCommand; -import com.casic.missiles.util.SpringContextUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - * @date 2024-04-24 - */ -@Component -@Slf4j -public class AepCommandSend implements AepCommandEnum { - - /** - * 处理电信平台的报文解析,并组装回复报文,发送电信平台 - * - * @param h2sDataMap - */ - public void handleAndReply(Map h2sDataMap) { - AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); - AepDeviceCommandLwmProfileClient client = getAepClient(aepConfig); - //为解析准备需要的参数 - List list = new ArrayList<>(); - SensorhubDecoder sensorhubDecoder = new SensorhubDecoder(); - ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); - bufferContent.writeBytes(JSON.toJSONString(h2sDataMap.get(PAYLOAD)).getBytes(Charset.forName(CHARSET))); - //对报文进行解码解析 - sensorhubDecoder.decode(null, bufferContent, list); - if (CollectionUtils.isNotEmpty(list)) { - AbstractBuildReplyCommand abstractBuildReplyCommand = new DefaultReplyCommand(); - //构建回复报文 - ByteBuf replyBytes = abstractBuildReplyCommand.excute((ParseResult) list.get(0)); - if (replyBytes == null) { - return; - } - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = getRequestContent(replyBytes, aepConfig, h2sDataMap); - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - log.info("send status-----" + msgResponse.getMessage()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex); - } finally { - client.shutdown(); - } - } - } - - /** - * 获取电信平台客户端 - * - * @param aepConfig - * @return - */ - private AepDeviceCommandLwmProfileClient getAepClient(AepConfig aepConfig) { - String aepKey = aepConfig.getKey(); - String aepSecret = aepConfig.getSecret(); - return AepDeviceCommandLwmProfileClient.newClient() - .appKey(aepKey).appSecret(aepSecret) - .build(); - } - - /** - * 构建aep平台的回复报文 - * - * @param replyBytes 回复的报文内容 - * @param aepConfig aep平台的配置 - * @param h2sDataMap - * @return - */ - private CreateCommandLwm2mProfileRequest getRequestContent(ByteBuf replyBytes, AepConfig aepConfig, Map h2sDataMap) { - Map queryMap = new HashMap<>(); - queryMap.put(VALUE, replyBytes.toString(Charset.forName(CHARSET))); - BusConfigParam busConfigParam = new BusConfigParam(); - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - Map dataGasMap = new HashMap<>(); - dataGasMap.put(SERVICE_ID, CONFIG); - dataGasMap.put(METHOD, CONFIG); - dataGasMap.put(PARAMS, queryMap); - String productId = (String) h2sDataMap.get(PRODUCE_ID); - String deviceId = (String) h2sDataMap.get(DEVICE_ID); - busConfigParam.setCommand(dataGasMap); - busConfigParam.setProductId(productId); - busConfigParam.setDeviceId(deviceId); - busConfigParam.setLevel(1); - busConfigParam.setOperator(aepConfig.getOperator()); - busConfigParam.setTtl(ObjectUtils.isNotEmpty(aepConfig.getTtl()) ? aepConfig.getTtl() : 3000); - request.setParamMasterKey(aepConfig.getParamMasterKey()); // single value - request.setBody(JSONObject.toJSONString(busConfigParam).getBytes()); - return request; - } - -} 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 140ee01..0c29281 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 @@ -1,20 +1,15 @@ package com.casic.missiles.controller; -import cn.hutool.Hutool; -import cn.hutool.core.lang.generator.UUIDGenerator; -import cn.hutool.http.HttpRequest; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.model.DeviceBizData; -import com.casic.missiles.model.DeviceFrameLog; +import com.casic.missiles.dto.device.DeviceCtnbDTO; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.response.ResponseData; -import com.casic.missiles.service.IAEPCommandService; -import com.casic.missiles.service.IDeviceBizDataService; -import com.casic.missiles.service.IDeviceFrameLogService; -import com.casic.missiles.service.IGeneralService; -import com.casic.missiles.util.SnowflakeUtil; +import com.casic.missiles.service.*; +import com.casic.missiles.util.aep.AepCommandSend; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -23,7 +18,6 @@ import javax.annotation.Resource; import java.util.Base64; -import java.util.List; import java.util.Map; @RestController @@ -34,13 +28,7 @@ IGeneralService defaultService; @Resource - IAEPCommandService aepCmdService; - - @Resource - IDeviceFrameLogService frameLogService; - - @Resource - IDeviceBizDataService bizDataService; + IDeviceService deviceService; @RequestMapping("/aep/data/string") public Object aepDataString(@RequestBody Map dataMap) { @@ -66,40 +54,27 @@ BirmmBaseFrame birmmFrame = defaultService.doFrameParse(frameBytes); if (birmmFrame != null) { // 处理业务数据 - birmmFrame.doParseBizTag(); + defaultService.doParseBizTag(birmmFrame); 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); - String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") - .contentType("application/json") - .body(birmmFrame.toJSON().toJSONString()) - .execute().body(); - log.info("发送到接口:{}", body); + // TODO-LIST + // 推送 + // 封装到service钟 异步推送 +// ThreadUtil.execAsync(() -> { +// String body = HttpUtil.createPost("http://139.198.19.235:22006/guanstare-gas/data/recv") +// .contentType("application/json") +// .body(birmmFrame.toJSON().toJSONString()) +// .executeAsync().body(); +// log.info("发送到接口:{}", body); +// }); // 保存业务数据 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()); - } - - // 批量保存 - bizDataService.saveBatch(bizDataList); + defaultService.saveBizData(birmmFrame, logId); } // 创建回复消息 @@ -109,21 +84,22 @@ String replyMessage = defaultService.replyMessage(configFrame); log.info("下行HEX字节消息帧:{}", replyMessage); - int retCode; + int retCode = -1; // 判断是否有profile boolean hasProfile = false; if (dataMap.containsKey("profile")) { hasProfile = (Boolean) dataMap.get("profile"); } - aepCmdService.setDeviceId((String) dataMap.get("deviceId")); - aepCmdService.setProductId((String) dataMap.get("productId")); - if (hasProfile) { - aepCmdService.setMasterApiKey("d3f49d576baf4112b5e48f41c148e89b"); - retCode = aepCmdService.handleSendCommandWithProfile(replyMessage); - } else { - aepCmdService.setMasterApiKey("ee2f4011f0a04f28b1572967891b57d5"); - retCode = aepCmdService.handleSendCommand(replyMessage, 2); // 2=16进制 + DeviceCtnbDTO device = deviceService.getCtnbViewByDevCode(birmmFrame.getDevCode()); + if (ObjectUtil.isNotEmpty(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(device.getCtnbDeviceId(), device.getCtnbProductId(), device.getCtnbMasterKey()); + + try { + retCode = aepCommandSend.handleAndReply(replyMessage, hasProfile); + } catch (Exception ex) { + log.error("向设备回复响应异常:{}", ex.getMessage()); + } } if (retCode == 0) { diff --git a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java index b1f145f..f271189 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/controller/ReceiveController.java @@ -23,12 +23,7 @@ public Object testNbResponse(@RequestBody Map dataMap) { ResponseData responseData = new ResponseData(); System.out.println(JSON.toJSON(dataMap)); - threadPoolExecutor.execute( - () -> { - AepCommandSend aepCommandSend = new AepCommandSend(); - aepCommandSend.handleAndReply(dataMap); - } - ); + responseData.setCode(200); return responseData; } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java deleted file mode 100644 index e22284a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseFrame.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.casic.missiles.frame; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.tag.config.DateTimeTag; -import com.casic.missiles.model.DeviceBizData; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Data -public class BirmmBaseFrame { - - // 前导码 固定为A3 - final String PRE_CODE = "A3"; - - // 协议版本 固定为20 - final String VERSION = "20"; - - // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 - int length; - - // 设备编号 - String devCode; - - // 设备类型 - String deviceType; - - // 通信方式 - String communicationType; - - // 目标节点地址 - String destinationAddr; - - // PDU类型 - String pduType; - - // 操作类型 - String operationType; - - // 序号 - String sequence; - - // 业务字段List - String tagListString; - - Map> tagList; - - // CRC - String crc; - - LocalDateTime logTime; - - String rawBizFrameString; - - public boolean isBizDataFrame() { - return false; - } - - public List convertToBizDataList() { - return new ArrayList<>(); - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put("devCode", getDevCode()); - json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - return json; - } - - public void doParseBizTag() {} - - public void replyPduType() { - - } - - public void replyBizTag() { - tagList = new HashMap<>(); - DateTimeTag dateTimeTag = new DateTimeTag(); - dateTimeTag.setDateTime(LocalDateTime.now()); - - List tags = new ArrayList<>(); - tags.add(dateTimeTag); - tagList.put(DateTimeTag.class.getSimpleName(), tags); - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java deleted file mode 100644 index 5394727..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmBaseTag.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame; - -import lombok.Data; - -@Data -public class BirmmBaseTag { - - private String oid; - private int tagLen; - private String valueStr; - - @Override - public String toString() { - return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; - } - - public String toProtocolString() { - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java deleted file mode 100644 index 772092d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmDeviceTypeEnums; -import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; -import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; - -public class BirmmFrameBuilderFactory { - - public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - - public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { - BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); - if (type != null) { - switch (type) { - case METHANE: - return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); - - case SENTINEL: - return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); - - case WELL: - return null; - - default: - return null; - } - - } - - return null; - } - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java deleted file mode 100644 index e74f229..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/BirmmTagBuilderFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.frame; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -import com.casic.missiles.frame.tag.config.*; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; -import com.casic.missiles.frame.tag.signal.PCITag; -import com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -public class BirmmTagBuilderFactory { - - public static BirmmBaseTag createTagByOid(String oid) { - BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); - if (null != tag) { - switch (tag) { - case RETRY_TIMES_TAG: - return new RetryTimesTag(); - - case DESTINATION_IP_TAG: - return new DestIPTag(); - - case DESTINATION_PORT_TAG: - return new DestPortTag(); - - case DATE_TAG: - return new DateTag(); - - case DATETIME_TAG: - return new DateTimeTag(); - - case UPLOAD_INTERVAL_TAG: - return new UploadIntervalTag(); - - case START_TIME_TAG: - return new StartTimeTag(); - - case COLLECT_INTERVAL_TAG: - return new CollectIntervalTag(); - - case COLLECT_COUNT_TAG: - return new CollectCountTag(); - - case LOWER_LIMIT_TAG: - return new LowerLimitTag(); - - case UPPER_LIMIT_TAG: - return new UpperLimitTag(); - - case SENSOR_STATE_1_TAG: - case SENSOR_STATE_2_TAG: - case SENSOR_STATE_3_TAG: - case SENSOR_STATE_4_TAG: - case SENSOR_STATE_5_TAG: - // 传感器状态 需要根据设备类型单独处理 - return new SensorStateTag(); - - case CELL_TAG: - return new CellTag(); - - case SOFTWARE_VERSION_TAG: - return new SoftwareVersionTag(); - - case PCI_TAG: - return new PCITag(); - - case RSRP_TAG: - return new RSRPTag(); - - case SNR_TAG: - return new SNRTag(); - - default: - return null; - } - } - - // 业务上传报表 - if (oid.startsWith("C")) { - return new UploadTag(); - } - return null; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java deleted file mode 100644 index 8456016..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class MethaneBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java deleted file mode 100644 index 3617ae7..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneFrameBuilderFactory { - - public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new MethaneTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new MethaneTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java deleted file mode 100644 index a1fd8bc..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.biz.CellTag; -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 com.casic.missiles.frame.tag.signal.RSRPTag; -import com.casic.missiles.frame.tag.signal.SNRTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneGetRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "GetRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { - RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); - body.put("reqSize", tag.getRequestSize()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); - body.put("reqOffset", tag.getRequestOffset()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java deleted file mode 100644 index 5f49fe7..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java deleted file mode 100644 index e936a9c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; - -import java.time.format.DateTimeFormatter; - -public class MethaneOnlineRequestFrame extends BirmmBaseFrame { - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "OnlineRequest"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { - SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); - body.put("softwareVersion", tag.getVersion()); - } - - json.put("mBody", body); - - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java deleted file mode 100644 index d478366..0000000 --- a/sensorhub-core/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.BirmmBaseFrame; -import com.casic.missiles.frame.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-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java deleted file mode 100644 index deeb421..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.casic.missiles.frame.BirmmBaseFrame; - -public class MethaneSetResponseFrame extends BirmmBaseFrame { -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java deleted file mode 100644 index 6ba27f6..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.methane; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class MethaneTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Methane"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (MethaneBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (MethaneBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - MethaneBizData bizData = new MethaneBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java deleted file mode 100644 index aeefccc..0000000 --- a/sensorhub-core/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.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-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java deleted file mode 100644 index 458e393..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import lombok.Data; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@Data -public class SentinelBizData { - - LocalDateTime uptime; - int bizType; - float value; - - @Override - public String toString() { - return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; - } - - public JSONObject toJSON() { - JSONObject json = new JSONObject(); - json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); - json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - return json; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java deleted file mode 100644 index bafe173..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.methane.*; - -public class SentinelFrameBuilderFactory { - - public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - return new MethaneGetRequestFrame(); - - case UP_TRAP_REQUEST: - return new SentinelTrapRequestFrame(); - - case UP_ONLINE_REQUEST: - return new MethaneOnlineRequestFrame(); - - case UP_SET_RESPONSE: - return new MethaneSetResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } - - public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { - BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); - if (operation != null) { - switch (operation) { - case DOWN_GET_REQUEST: - // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 - return new MethaneGetResponseFrame(); - - case UP_TRAP_REQUEST: - // TRAP_REQUEST消息回复TRAP_RESPONSE - return new SentinelTrapResponseFrame(); - - case UP_ONLINE_REQUEST: - // ONLINE_REQUEST消息回复ONLINE_RESPONSE - return new MethaneOnlineResponseFrame(); - - default: - return null; - } - } else { - return null; - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java deleted file mode 100644 index a36d243..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.tag.biz.CellTag; -import com.casic.missiles.frame.tag.biz.DateTag; -import com.casic.missiles.frame.tag.biz.SensorStateTag; -import com.casic.missiles.frame.tag.biz.UploadTag; -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.model.DeviceBizData; -import com.casic.missiles.util.BytesUtil; -import lombok.extern.slf4j.Slf4j; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -@Slf4j -public class SentinelTrapRequestFrame extends BirmmBaseFrame { - - private List bizDataList; - - private final String DEV_TYPE = "Sentinel"; - private final String MESSAGE_TYPE = "Data"; - private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; - - @Override - public JSONObject toJSON() { - JSONObject json = super.toJSON(); - json.put("devType", DEV_TYPE); - json.put("mType", MESSAGE_TYPE); - - JSONObject body = new JSONObject(); - body.put("bType", BIZ_TYPE); - body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - body.put("cell", cellTag.getCellVal()); - } - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - body.put("pci", pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - body.put("rsrp", rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - body.put("snr", snrTag.getSnr()); - } - - // 业务数据 - if (bizDataList != null) { - JSONArray datas = new JSONArray(); - for (SentinelBizData bizData : bizDataList) { - datas.add(bizData.toJSON()); - } - body.put("datas", datas); - } - - json.put("mBody", body); - - return json; - } - - @Override - public boolean isBizDataFrame() { - return true; - } - - @Override - public List convertToBizDataList() { - List resultList = new ArrayList<>(); - if (bizDataList != null) { - for (SentinelBizData data : bizDataList) { - DeviceBizData bizData = new DeviceBizData(); - bizData.setBizType(String.valueOf(data.getBizType())); - bizData.setValue(String.format("%.3f", data.getValue())); - bizData.setUptime(data.getUptime()); - - // 电量 - if (getTagList().containsKey(CellTag.class.getSimpleName())) { - CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); - bizData.setCell(cellTag.getCellVal()); - } - - // 信号质量 - if (getTagList().containsKey(PCITag.class.getSimpleName())) { - PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); - bizData.setPci(pciTag.getPci()); - } - if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { - RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); - bizData.setRsrp(rsrpTag.getRsrp()); - } - if (getTagList().containsKey(SNRTag.class.getSimpleName())) { - SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); - bizData.setSnr(snrTag.getSnr()); - } - - resultList.add(bizData); - } - } - - return resultList; - } - - @Override - public void doParseBizTag() { - if (getTagList().containsKey(UploadTag.class.getSimpleName())) { - handleUploadTag(); - } - - if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { - handleSensorStateTag(); - } - } - - private void handleUploadTag() { - List tags = getTagList().get(UploadTag.class.getSimpleName()); - - bizDataList = new ArrayList<>(); - - for (BirmmBaseTag tag : tags) { - UploadTag uploadTag = (UploadTag) tag; - // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 - boolean isValid = uploadTag.checkOid(); - if (isValid) { - // 找到DateTag 取出其中的日期 - if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { - continue; - } - DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); - uploadTag.setStartDate(dateTag.getDate()); - - int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 - LocalDateTime start = uploadTag.getStartTime(); - for (int i = 0; i < count; i++) { - SentinelBizData bizData = new SentinelBizData(); - - bizData.setBizType(uploadTag.getBizType()); - bizData.setUptime(start); - String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); - bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 - - bizDataList.add(bizData); - - // 加上时间间隔 - start = start.plusMinutes(uploadTag.getInterval()); - } - } - } - } - - private void handleSensorStateTag() { - List tags = getTagList().get(SensorStateTag.class.getSimpleName()); - for (BirmmBaseTag tag : tags) { - SensorStateTag sensorStateTag = (SensorStateTag) tag; - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { - // 甲烷传感器状态 - log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { - // 甲烷传感器状态 - log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); - } - - // TODO-LIST - // 传感器状态异常时需要上报异常事件 - } - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java deleted file mode 100644 index 2a87b3f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.casic.missiles.frame.sentinel; - -import com.casic.missiles.enums.BirmmOperationTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; - -public class SentinelTrapResponseFrame 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-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java deleted file mode 100644 index 55bc40d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CellTag extends BirmmBaseTag { - - final String CELL_TAG_OID = "60000020"; - - int cellVal; - - @Override - public String toString() { - return super.toString() + "[value: " + cellVal + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - cellVal = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java deleted file mode 100644 index 8a40e1c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTag extends BirmmBaseTag { - - final String DATE_TAG_OID = "10000050"; - - LocalDate date; - - @Override - public String toString() { - return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java deleted file mode 100644 index fcf3063..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.frame.BirmmBaseTag; - -public class SensorStateTag extends BirmmBaseTag { - -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java deleted file mode 100644 index bd30a2b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.casic.missiles.frame.tag.biz; - -import com.casic.missiles.enums.BirmmDataBizTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadTag extends BirmmBaseTag { - - private int bizType; - private int interval; - private int startMin; - private LocalDateTime startTime; - - @Override - public String toString() { - return super.toString(); - } - - public boolean checkOid() { - long oidValue = Long.parseLong(getOid(), 16); - - // 数据类型不在范围内则返回false - bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); - if(BirmmDataBizTypeEnums.toType(bizType) == null) { - return false; - } - interval = (int) ((oidValue >> 11) & 0x7FF); - startMin = (int) (oidValue & 0x7FF); - - int hour = startMin / 60; - int minute = startMin % 60; - - startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); - - return true; - } - - public void setStartDate(String dateStr) { - LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); - setStartDate(date); - } - - public void setStartDate(LocalDate date) { - startTime = startTime.withYear(date.getYear()); - startTime = startTime.withMonth(date.getMonthValue()); - startTime = startTime.withDayOfMonth(date.getDayOfMonth()); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java deleted file mode 100644 index 017f4df..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectCountTag extends BirmmBaseTag { - - final String COLLECT_COUNT_TAG_OID = "10000106"; - - // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 - int count; - - @Override - public String toString() { - return super.toString() + "[value: " + count + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - count = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java deleted file mode 100644 index 63965bb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class CollectIntervalTag extends BirmmBaseTag { - - final String COLLECT_INTERVAL_TAG_OID = "10000105"; - - // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java deleted file mode 100644 index a5e1cdb..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DateTimeTag extends BirmmBaseTag { - - final String DATETIME_TAG_OID = "10000051"; - - LocalDateTime dateTime; - - @Override - public String toString() { - return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 - - int year = dateTime.getYear() - 2000; - int month = dateTime.getMonthValue(); - int day = dateTime.getDayOfMonth(); - int hour = dateTime.getHour(); - int minute = dateTime.getMinute(); - int second = dateTime.getSecond(); - - result += String.format("%02x", year); - result += String.format("%02x", month); - result += String.format("%02x", day); - result += String.format("%02x", hour); - result += String.format("%02x", minute); - result += String.format("%02x", second); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - String hexY = valueStr.substring(0, 2); - String hexM = valueStr.substring(2, 4); - String hexD = valueStr.substring(4, 6); - - String hexH = valueStr.substring(6, 8); - String hexMin = valueStr.substring(8, 10); - String hexS = valueStr.substring(10, 12); - - dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), - BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java deleted file mode 100644 index b168d5c..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestIPTag extends BirmmBaseTag { - - final String DESTINATION_IP_TAG_OID = "10000022"; - - String ip; - - @Override - public String toString() { - return super.toString() + "[value: " + ip + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - ip = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java deleted file mode 100644 index 8f5ce2f..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class DestPortTag extends BirmmBaseTag { - - final String DESTINATION_PORT_TAG_OID = "10000023"; - - String port; - - @Override - public String toString() { - return super.toString() + "[value: " + port + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - port = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java deleted file mode 100644 index 63cd9e8..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class LowerLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000900"; - - // 单精度浮点数 - float lowerLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + lowerLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java deleted file mode 100644 index 68c36af..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.time.format.DateTimeFormatter; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RetryTimesTag extends BirmmBaseTag { - - final String RETRY_TIMES_TAG_OID = "1000000A"; - - // TYPE_U8整型,重传次数 1-10 - int times; - - @Override - public String toString() { - return super.toString() + "[value: " + times + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - times = Integer.parseInt(valueStr, 16); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java deleted file mode 100644 index 879e1d1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StartTimeTag extends BirmmBaseTag { - - final String START_TIME_TAG_OID = "10000104"; - - // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 - int startMinute; - - @Override - public String toString() { - return super.toString() + "[value: " + startMinute + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - startMinute = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java deleted file mode 100644 index ed3c20a..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UploadIntervalTag extends BirmmBaseTag { - - final String UPLOAD_INTERVAL_TAG_OID = "10000062"; - - // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 - int interval; - - @Override - public String toString() { - return super.toString() + "[value: " + interval + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - interval = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java deleted file mode 100644 index cc9fa81..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.config; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class UpperLimitTag extends BirmmBaseTag { - - final String UPPER_LIMIT_TAG_OID = "10000901"; - - // 单精度浮点数 - float upperLimit; - - @Override - public String toString() { - return super.toString() + "[value: " + upperLimit + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java deleted file mode 100644 index 8e40b85..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class NeedOTATag extends BirmmBaseTag { - - final String NEED_OTA_TAG_OID = "60000600"; - - boolean need; - - @Override - public String toString() { - return super.toString() + "[value: " + need + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - need = Boolean.parseBoolean(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java deleted file mode 100644 index 08dafcf..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageCRCTag extends BirmmBaseTag { - - final String PACKAGE_CRC_TAG_OID = "60000603"; - - String packCRC; - - @Override - public String toString() { - return super.toString() + "[value: " + packCRC + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packCRC = valueStr; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java deleted file mode 100644 index f9801a2..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.apache.tomcat.util.buf.HexUtils; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageDataTag extends BirmmBaseTag { - - final String PACKAGE_DATA_TAG_OID = "60000601"; - - byte[] data; - - @Override - public String toString() { - return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID - result += String.format("%04d", data.length); // 长度 - result += HexUtils.toHexString(data); - - return result; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java deleted file mode 100644 index 05ff3c1..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PackageSizeTag extends BirmmBaseTag { - - final String PACKAGE_SIZE_TAG_OID = "60000602"; - - int packSize; - - @Override - public String toString() { - return super.toString() + "[value: " + packSize + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - packSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java deleted file mode 100644 index bfc83dd..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestOffsetTag extends BirmmBaseTag { - - final String REQUEST_OFFSET_TAG_OID = "20000102"; - - // 本次请求的升级包偏移量 - int requestOffset; - - @Override - public String toString() { - return super.toString() + "[value: " + requestOffset + "]"; - } - - @Override - public String toProtocolString() { - String result = ""; - result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID - result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 - result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); - - return result; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestOffset = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java deleted file mode 100644 index 6c096a0..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseTag; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RequestSizeTag extends BirmmBaseTag { - - final String REQUEST_SIZE_TAG_OID = "20000100"; - - // 本次请求的升级包大小 - int requestSize; - - @Override - public String toString() { - return super.toString() + "[value: " + requestSize + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - requestSize = Integer.parseInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java deleted file mode 100644 index e21fa01..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.casic.missiles.frame.tag.ota; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SoftwareVersionTag extends BirmmBaseTag { - - final String SOFTWARE_VERSION_TAG_OID = "60000500"; - - String version; - - @Override - public String toString() { - return super.toString() + "[value: " + version + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - version = new String(BytesUtil.hexStringToBytes(valueStr)); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java deleted file mode 100644 index 534fd0d..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PCITag extends BirmmBaseTag { - - final String PCI_TAG_OID = "60000511"; - - // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 - int pci; - - @Override - public String toString() { - return super.toString() + "[value: " + pci + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - pci = BytesUtil.hexStringToUInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java deleted file mode 100644 index 4e1dc0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RSRPTag extends BirmmBaseTag { - - final String RSRP_TAG_OID = "60000513"; - - //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 - int rsrp; - - @Override - public String toString() { - return super.toString() + "[value: " + rsrp + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - rsrp = BytesUtil.hexStringToSInt(valueStr); - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java deleted file mode 100644 index 5ce0c0b..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.casic.missiles.frame.tag.signal; - -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.util.BytesUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -public class SNRTag extends BirmmBaseTag { - - final String SNR_TAG_OID = "60000516"; - - //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 - int snr; - - @Override - public String toString() { - return super.toString() + "[value: " + snr + "]"; - } - - @Override - public void setValueStr(String valueStr) { - super.setValueStr(valueStr); - snr = BytesUtil.hexStringToSInt(valueStr); - } -} 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 6931af5..9a92013 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,7 +1,7 @@ package com.casic.missiles.parser; import cn.hutool.http.HttpUtil; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.model.DeviceBizData; import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.service.GeneralServiceImpl; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java index c79095b..f42012a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/BirmmProtocolParser.java @@ -1,6 +1,6 @@ package com.casic.missiles.parser; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseTag; import java.util.List; import java.util.Map; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java index bda0040..d047453 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/impl/BirmmProtocolParserImpl.java @@ -1,9 +1,8 @@ package com.casic.missiles.parser.impl; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; -import com.casic.missiles.frame.BirmmTagBuilderFactory; +import com.casic.missiles.frame.tag.BirmmTagBuilderFactory; +import com.casic.missiles.frame.base.BirmmBaseTag; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.crc.CRCUtil; import com.casic.missiles.util.BytesUtil; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java deleted file mode 100644 index b71d831..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/AEPCommandServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.casic.missiles.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.casic.missiles.util.BytesUtil; -import com.ctg.ag.sdk.biz.AepDeviceCommandClient; -import com.ctg.ag.sdk.biz.AepDeviceCommandLwmProfileClient; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandRequest; -import com.ctg.ag.sdk.biz.aep_device_command.CreateCommandResponse; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileRequest; -import com.ctg.ag.sdk.biz.aep_device_command_lwm_profile.CreateCommandLwm2mProfileResponse; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -import java.nio.charset.StandardCharsets; - -@Configuration -@Slf4j -@Data -public class AEPCommandServiceImpl implements IAEPCommandService { - - @Value("${sensorhub.aep.key}") - private String key; - - @Value("${sensorhub.aep.secret}") - private String secret; - - @Value("${sensorhub.aep.ttl}") - private Integer ttl = 7200; - private Integer level = 1; - - @Value("${sensorhub.aep.operator}") - private String operator = "birmm"; - - private String masterApiKey; - - private String deviceId; - private String productId; - - @Override - public int handleSendCommand(String command, int dataType) { - AepDeviceCommandClient client = AepDeviceCommandClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject content = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandRequest request = new CreateCommandRequest(); - request.setParamMasterKey(masterApiKey); - - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - content.put("dataType", dataType); // 数据类型:1字符串,2十六进制 - content.put("payload", command); // 指令内容,数据格式为十六进制时需要填十六进制字符串 - body.put("content", content); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandResponse msgResponse = client.CreateCommand(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - - return retCode; - } - - @Override - public int handleSendCommandWithProfile(String command) { - AepDeviceCommandLwmProfileClient client = AepDeviceCommandLwmProfileClient.newClient().appKey(key).appSecret(secret).build(); - - JSONObject body = new JSONObject(); - JSONObject cmd = new JSONObject(); - JSONObject paras = new JSONObject(); - - int retCode = -1; - - try { - //组装请求返回的参数 - CreateCommandLwm2mProfileRequest request = new CreateCommandLwm2mProfileRequest(); - request.setParamMasterKey(masterApiKey); - - paras.put("Value", BytesUtil.hexStringToBytes(command)); - cmd.put("paras", paras); - cmd.put("serviceId", "Config"); - cmd.put("method", "Config"); - - body.put("command", cmd); - body.put("deviceId", deviceId); - body.put("operator", operator); - body.put("productId", productId); - - request.setBody(body.toJSONString().getBytes()); - log.info("向AEP平台发送指令:{}", body.toJSONString()); - - //调用电信平台的客服端发送报文回复 - CreateCommandLwm2mProfileResponse msgResponse = client.CreateCommandLwm2mProfile(request); - JSONObject retObj = JSON.parseObject(new String(msgResponse.getBody(), StandardCharsets.UTF_8)); - retCode = (int) retObj.get("code"); - - log.info("AEP平台返回消息:{}", retObj.toJSONString()); - } catch (Exception ex) { - log.error("电信平台发送失败,异常信息{}", ex.getMessage()); - } finally { - client.shutdown(); - } - return retCode; - } -} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java index da20a28..e2a7d16 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/service/GeneralServiceImpl.java @@ -2,25 +2,25 @@ import com.casic.missiles.enums.BirmmDeviceTypeEnums; import com.casic.missiles.enums.BirmmFrameAttributeEnums; -import com.casic.missiles.enums.BirmmTagTypeEnums; -import com.casic.missiles.frame.BirmmBaseFrame; -import com.casic.missiles.frame.BirmmBaseTag; +import com.casic.missiles.frame.base.BirmmBaseFrame; import com.casic.missiles.frame.BirmmFrameBuilderFactory; +import com.casic.missiles.model.DeviceBizData; +import com.casic.missiles.model.DeviceFrameLog; import com.casic.missiles.parser.BirmmProtocolParser; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.parser.safe.impl.Sm4; import com.casic.missiles.parser.safe.impl.TeaUtilsX; -import com.casic.missiles.parser.safe.impl.Teas; +import com.casic.missiles.util.SnowflakeUtil; import com.casic.missiles.util.SpringContextUtil; +import com.casic.missiles.frame.base.BirmmBaseTag; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Resource; @Service @Slf4j @@ -29,6 +29,12 @@ @Resource BirmmProtocolParser protocol; + @Resource + IDeviceFrameLogService frameLogService; + + @Resource + IDeviceBizDataService bizDataService; + byte[] keyByte = { 0x24, (byte) 0xad, 0x18, 0x25, 0x07, 0x47, (byte) 0x9a, 0x5d, (byte) 0xa3, (byte) 0xad, (byte) 0x94, (byte) 0xd9, (byte) 0xd7, (byte) 0x8e, (byte) 0xa2, 0x03 }; @@ -67,7 +73,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + deviceType.equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); @@ -102,6 +109,41 @@ } @Override + public void doParseBizTag(BirmmBaseFrame baseFrame) { + baseFrame.doParseBizTag(); + } + + @Override + public Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes) { + DeviceFrameLog frameLog = new DeviceFrameLog(); + frameLog.setId(new SnowflakeUtil().nextId()); + frameLog.setDevcode(baseFrame.getDevCode()); + frameLog.setRawFrame(HexUtils.toHexString(frameBytes).toUpperCase()); + frameLog.setRawBizFrame(baseFrame.getRawBizFrameString()); + frameLog.setDataJson(baseFrame.toJSON().toJSONString()); + frameLog.setLogtime(baseFrame.getLogTime()); + frameLogService.save(frameLog); + + return frameLog.getId(); + } + + @Override + public void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId) { + List bizDataList = baseFrame.convertToBizDataList(); + for (DeviceBizData bizData : bizDataList) { + // 设置其他的属性 + bizData.setId(new SnowflakeUtil().nextId()); + bizData.setFrameLogId(frameLogId); // 关联日志记录id + bizData.setDevcode(baseFrame.getDevCode()); + bizData.setDeviceType(Integer.valueOf(baseFrame.getDeviceType())); + bizData.setLogtime(baseFrame.getLogTime()); + } + + // 批量保存 + bizDataService.saveBatch(bizDataList); + } + + @Override public BirmmBaseFrame buildReplyFrame(BirmmBaseFrame uploadFrame) { BirmmBaseFrame configFrame = BirmmFrameBuilderFactory.createBirmmReplyFrame(uploadFrame.getDeviceType(), uploadFrame.getOperationType()); @@ -114,6 +156,9 @@ configFrame.setDeviceType(uploadFrame.getDeviceType()); configFrame.replyPduType(); + // TODO-LIST + // 查询数据库找到待下发的内容 + configFrame.replyBizTag(); } @@ -157,7 +202,8 @@ // TODO-LIST // 密钥根据设备编号获取 SafeStrategy safeStrategy; - if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue())) { + if (configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.METHANE.getValue()) || + configFrame.getDeviceType().equalsIgnoreCase(BirmmDeviceTypeEnums.SENTINEL.getValue())) { safeStrategy = SpringContextUtil.getBean(Sm4.class); } else { safeStrategy = SpringContextUtil.getBean(TeaUtilsX.class); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java b/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java deleted file mode 100644 index 49ab7ad..0000000 --- a/sensorhub-core/src/main/java/com/casic/missiles/service/IAEPCommandService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.casic.missiles.service; - -public interface IAEPCommandService { - - int handleSendCommand(String command, int dataType); - - int handleSendCommandWithProfile(String command); - - void setMasterApiKey(String key); - void setDeviceId(String deviceId); - void setProductId(String productId); -} 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 06df723..e374e46 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 @@ -1,6 +1,6 @@ package com.casic.missiles.service; -import com.casic.missiles.frame.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseFrame; public interface IGeneralService { @@ -11,6 +11,11 @@ */ BirmmBaseFrame doFrameParse(byte[] frame); + void doParseBizTag(BirmmBaseFrame baseFrame); + + Long saveFrameLog(BirmmBaseFrame baseFrame, byte[] frameBytes); + void saveBizData(BirmmBaseFrame baseFrame, Long frameLogId); + /** * 创建配置帧 * @param uploadFrame 收到的消息帧 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java new file mode 100644 index 0000000..9b3ab90 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/SpringContextUtil.java @@ -0,0 +1,106 @@ +package com.casic.missiles.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + +/** + * @Description: Spring应用上下文工具 + * @Author: wangpeng + * @Date: 2022/8/11 18:04 + */ +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java new file mode 100644 index 0000000..76fec87 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandBody.java @@ -0,0 +1,63 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + + +@Data +public class AepCommandBody { + + /** + * 电信平台设备id,选填 + */ + private String deviceId; + + /** + * 必填 产品id + */ + private String productId; + + /** + * 必填 操作人 + */ + private String operator; + + /** + * 1、2设备级别,3为设备组,默认为1,选填 + */ + private Integer level; + + /** + * 指令内容,必填,格式为json + */ + private Map content; + + private Map command; + + /** + * 消息超时时长 + */ + private Integer ttl; + + public void setPayloadString(String frameStr) { + content = new HashMap<>(); + content.put("dataType", 1); // 字符串方式 + content.put("payload", frameStr); + } + + public void setPayloadBytes(String frameByteStr) { + content = new HashMap<>(); + content.put("dataType", 2); // hex方式 + content.put("payload", frameByteStr); + } + + public void setCommand(Map paras, String serviceId, String method) { + command = new HashMap<>(); + command.put("paras", paras); + command.put("serviceId", serviceId); + command.put("method", method); + } + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java new file mode 100644 index 0000000..be3a404 --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepCommandSend.java @@ -0,0 +1,175 @@ +package com.casic.missiles.util.aep; + + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.util.BytesUtil; +import com.casic.missiles.util.SpringContextUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * @author cz + * @date 2024-04-24 + */ +@Slf4j +@Data +public class AepCommandSend { + + private String deviceId; + private String productId; + private String masterApiKey; + + private Long offset = 0L; + private Long lastGetOffsetTime = 0L; + + private final String CREATE_COMMAND_PATH = "/aep_device_command/command"; + private final String CREATE_COMMAND_LWM2M_PROFILE_PATH = "/aep_device_command_lwm_profile/commandLwm2mProfile"; + + public AepCommandSend() { + } + + public AepCommandSend(String deviceId, String productId, String masterApiKey) { + this.deviceId = deviceId; + this.productId = productId; + this.masterApiKey = masterApiKey; + } + + /** + * 处理电信平台的报文解析,并组装回复报文,发送电信平台 + * + * @param frameStr 业务数据的payload内容 + */ + public int handleAndReply(String frameStr) throws Exception { + return handleAndReply(frameStr, false); + } + + public int handleAndReply(String frameStr, boolean hasProfile) throws Exception { + HttpResponse response ; + + if (hasProfile) { + response = createCommandWithProfile(frameStr); + } else { + response = createCommand(frameStr); + } + + JSONObject retObj = new JSONObject(); + try { + retObj = JSON.parseObject(new String(response.body().getBytes(), StandardCharsets.UTF_8)); + + log.info("AEP平台返回消息: {}", retObj.toJSONString()); + } catch (Exception ex) { + log.error("AEP平台发送失败,异常信息{}", ex.getMessage()); + } + + return (int) retObj.get("code"); + } + + private Long getTimeOffset() { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + String timeUrl = aepConfig.getTimeUrl(); + + try { + HttpResponse response = HttpRequest.get(timeUrl).execute(); + String timeAg = response.header("x-ag-timestamp"); + + return Long.parseLong(timeAg) - System.currentTimeMillis(); + } catch (Exception ex) { + return 0L; + } + } + + private String signature(Long timestamp, String appSecret, String appKey, String masterApiKey, byte[] bodyBytes) throws Exception { + return Signature.sign(appSecret, appKey, String.valueOf(timestamp), masterApiKey, bodyBytes); + } + + public HttpResponse createCommand(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setPayloadBytes(frameStr); + + log.info("向AEP平台发送payload消息: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20190712225145"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + CREATE_COMMAND_PATH) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } + + public HttpResponse createCommandWithProfile(String frameStr) throws Exception { + AepConfig aepConfig = SpringContextUtil.getBean(AepConfig.class); + + String baseUrl = aepConfig.getBaseUrl(); + + Map paras = new HashMap<>(); + paras.put("Value", BytesUtil.hexStringToBytes(frameStr)); // 透传的指令内容 加密后的base64字符串 参数名根据profile文件来确定 + + // 消息体 + AepCommandBody body = new AepCommandBody(); + body.setDeviceId(deviceId); + body.setProductId(productId); + body.setTtl(aepConfig.getTtl()); + body.setOperator(aepConfig.getOperator()); + body.setLevel(aepConfig.getLevel()); + body.setCommand(paras, "Config", "Config"); + + log.info("向AEP平台发送Config指令: {}", JSON.toJSONString(body)); + + // 计算时间戳 用于签名 + long currentTime = System.currentTimeMillis(); + if (currentTime - lastGetOffsetTime > 300 * 1000) //300秒调用一次 + { + offset = getTimeOffset(); + lastGetOffsetTime = currentTime; + } + long timestamp = currentTime + offset; + + // 消息头 + Map header = new HashMap<>(); + header.put("application", aepConfig.getKey()); + header.put("version", "20191231141545"); + header.put("timestamp", String.valueOf(timestamp)); + header.put("MasterKey", masterApiKey); + header.put("signature", signature(timestamp, aepConfig.getSecret(), aepConfig.getKey(), masterApiKey, JSONObject.toJSONString(body).getBytes())); + + return HttpRequest.post(baseUrl + getCREATE_COMMAND_LWM2M_PROFILE_PATH()) + .body(JSON.toJSONString(body)) + .addHeaders(header) + .contentType("application/json; charset=UTF-8") + .execute(); + } +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java new file mode 100644 index 0000000..01945eb --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/AepConfig.java @@ -0,0 +1,34 @@ +package com.casic.missiles.util.aep; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties(prefix = "sensorhub.aep") +public class AepConfig { + +// @Value("${sensorhub.aep.key}") + private String key; + +// @Value("${secret}") + private String secret; + +// @Value("${time-url}") + private String timeUrl; + +// @Value("${base-url}") + private String baseUrl; + +// @Value("${ttl}") + private Integer ttl = 7200; + +// @Value("${level}") + private Integer level = 1; + +// @Value("${operator}") + private String operator = "birmm"; + +} diff --git a/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java new file mode 100644 index 0000000..331b05c --- /dev/null +++ b/sensorhub-core/src/main/java/com/casic/missiles/util/aep/Signature.java @@ -0,0 +1,67 @@ +package com.casic.missiles.util.aep; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; + +public class Signature { + + public Signature() { + } + + /** + * 签名 + * 使用AppKey、AppSecretKey、timestamp、MasterAPIKey和业务数据进行签名 + * @param secret AppSecretKey + * @param application AppKey + * @param timestamp 时间戳 + * @param masterKey 产品的MasterAPIKey + * @param body 业务数据 + * @return 返回的签名数据 + * @throws Exception 抛出的需要处理的异常 + */ + public static String sign(String secret, String application, String timestamp, String masterKey, byte[] body) throws Exception { + if (secret == null) { + throw new Exception("Secret cannot be null"); + } else if (application == null) { + throw new Exception("Application cannot be null"); + } else if (timestamp == null) { + throw new Exception("Timestamp cannot be null"); + } else if (masterKey == null) { + throw new Exception("MasterAPIKey cannot be null"); + } + + StringBuilder sb = new StringBuilder(); + sb.append("application").append(":").append(application).append("\n"); + sb.append("timestamp").append(":").append(timestamp).append("\n"); + sb.append("MasterKey").append(":").append(masterKey).append("\n"); + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + outStream.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + if (body != null && body.length > 0) { + outStream.write(body); + outStream.write("\n".getBytes(StandardCharsets.UTF_8)); + } + + return new String(Base64.encodeBase64(encryptHMAC(secret, outStream.toByteArray()))); + } + + public static byte[] encryptHMAC(String secret, byte[] data) { + byte[] bytes = null; + + try { + SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSha1"); + Mac mac = Mac.getInstance(secretKey.getAlgorithm()); + mac.init(secretKey); + bytes = mac.doFinal(data); + } catch (Exception var5) { + var5.printStackTrace(System.err); + } + + return bytes; + } +} diff --git a/sensorhub-service-birmm/pom.xml b/sensorhub-service-birmm/pom.xml new file mode 100644 index 0000000..bb7a84b --- /dev/null +++ b/sensorhub-service-birmm/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.casic + casic-iot + 1.0.0-SNAPSHOT + + + sensorhub-service-birmm + 北无系列设备协议解析 + + + + com.casic + sensorhub-support + 1.0.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java new file mode 100644 index 0000000..ef1fd2b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/BirmmFrameBuilderFactory.java @@ -0,0 +1,54 @@ +package com.casic.missiles.frame; + +import com.casic.missiles.enums.BirmmDeviceTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.methane.MethaneFrameBuilderFactory; +import com.casic.missiles.frame.sentinel.SentinelFrameBuilderFactory; + +public class BirmmFrameBuilderFactory { + + public static BirmmBaseFrame createBirmmFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + + public static BirmmBaseFrame createBirmmReplyFrame(String deviceType, String operaType) { + BirmmDeviceTypeEnums type = BirmmDeviceTypeEnums.toType(deviceType); + if (type != null) { + switch (type) { + case METHANE: + return MethaneFrameBuilderFactory.createMethaneReplyFrameByOperation(operaType); + + case SENTINEL: + return SentinelFrameBuilderFactory.createSentinelReplyFrameByOperation(operaType); + + case WELL: + return null; + + default: + return null; + } + + } + + return null; + } + +} 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 new file mode 100644 index 0000000..b786666 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseFrame.java @@ -0,0 +1,91 @@ +package com.casic.missiles.frame.base; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.tag.config.DateTimeTag; +import com.casic.missiles.model.DeviceBizData; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Data +public class BirmmBaseFrame { + + // 前导码 固定为A3 + final String PRE_CODE = "A3"; + + // 协议版本 固定为20 + final String VERSION = "20"; + + // 帧长度 后续到CRC字段前的字节总长度 不包括长度字段和CRC字段 + int length; + + // 设备编号 + String devCode; + + // 设备类型 + String deviceType; + + // 通信方式 + String communicationType; + + // 目标节点地址 + String destinationAddr; + + // PDU类型 + String pduType; + + // 操作类型 + String operationType; + + // 序号 + String sequence; + + // 业务字段List + String tagListString; + + Map> tagList; + + // CRC + String crc; + + LocalDateTime logTime; + + String rawBizFrameString; + + public boolean isBizDataFrame() { + return false; + } + + public List convertToBizDataList() { + return new ArrayList<>(); + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("devCode", getDevCode()); + json.put("ts", getLogTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + return json; + } + + public void doParseBizTag() {} + + public void replyPduType() { + + } + + public void replyBizTag() { + tagList = new HashMap<>(); + DateTimeTag dateTimeTag = new DateTimeTag(); + dateTimeTag.setDateTime(LocalDateTime.now()); + + List tags = new ArrayList<>(); + tags.add(dateTimeTag); + tagList.put(DateTimeTag.class.getSimpleName(), tags); + } + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java new file mode 100644 index 0000000..2dd8b3b --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/base/BirmmBaseTag.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.base; + +import lombok.Data; + +@Data +public class BirmmBaseTag { + + private String oid; + private int tagLen; + private String valueStr; + + @Override + public String toString() { + return "[name: " + getClass().getSimpleName() + "][oid: " + oid + "][hex: " + valueStr + "]"; + } + + public String toProtocolString() { + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java new file mode 100644 index 0000000..8456016 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class MethaneBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..e758e82 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneFrameBuilderFactory.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneFrameBuilderFactory { + + public static BirmmBaseFrame createMethaneFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new MethaneTrapRequestFrame(); + + case UP_ONLINE_REQUEST: + return new MethaneOnlineRequestFrame(); + + case UP_SET_RESPONSE: + return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createMethaneReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new MethaneTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} 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 new file mode 100644 index 0000000..92e93af --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetRequestFrame.java @@ -0,0 +1,40 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; + +import com.casic.missiles.frame.base.BirmmBaseFrame; +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 java.time.format.DateTimeFormatter; + +public class MethaneGetRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "GetRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(RequestSizeTag.class.getSimpleName())) { + RequestSizeTag tag = (RequestSizeTag) getTagList().get(RequestSizeTag.class.getSimpleName()).get(0); + body.put("reqSize", tag.getRequestSize()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + RequestOffsetTag tag = (RequestOffsetTag) getTagList().get(RequestOffsetTag.class.getSimpleName()).get(0); + body.put("reqOffset", tag.getRequestOffset()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..bd707fa --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneGetResponseFrame.java @@ -0,0 +1,50 @@ +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/MethaneOnlineRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java new file mode 100644 index 0000000..440a957 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineRequestFrame.java @@ -0,0 +1,33 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; + +import java.time.format.DateTimeFormatter; + +public class MethaneOnlineRequestFrame extends BirmmBaseFrame { + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "OnlineRequest"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(SoftwareVersionTag.class.getSimpleName())) { + SoftwareVersionTag tag = (SoftwareVersionTag) getTagList().get(SoftwareVersionTag.class.getSimpleName()).get(0); + body.put("softwareVersion", tag.getVersion()); + } + + json.put("mBody", body); + + return json; + } +} 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 new file mode 100644 index 0000000..2c7a7f8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneOnlineResponseFrame.java @@ -0,0 +1,42 @@ +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/MethaneSetResponseFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java new file mode 100644 index 0000000..980c71c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneSetResponseFrame.java @@ -0,0 +1,6 @@ +package com.casic.missiles.frame.methane; + +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class MethaneSetResponseFrame 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 new file mode 100644 index 0000000..6a4011a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.methane; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class MethaneTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Methane"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (MethaneBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (MethaneBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + MethaneBizData bizData = new MethaneBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..e6298b3 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/methane/MethaneTrapResponseFrame.java @@ -0,0 +1,20 @@ +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/sentinel/SentinelBizData.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java new file mode 100644 index 0000000..458e393 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelBizData.java @@ -0,0 +1,28 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import lombok.Data; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +public class SentinelBizData { + + LocalDateTime uptime; + int bizType; + float value; + + @Override + public String toString() { + return "[" + uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "][" + value + "][" + bizType + "]"; + } + + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put(BirmmDataBizTypeEnums.toType(bizType).getName(), String.format("%.3f", value)); + json.put("uptime", uptime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + return json; + } +} 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 new file mode 100644 index 0000000..7ff7c2c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelFrameBuilderFactory.java @@ -0,0 +1,58 @@ +package com.casic.missiles.frame.sentinel; + +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.MethaneOnlineResponseFrame; + +public class SentinelFrameBuilderFactory { + + public static BirmmBaseFrame createSentinelFrameByOperation(String operaType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(operaType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + return new MethaneGetRequestFrame(); + + case UP_TRAP_REQUEST: + return new SentinelTrapRequestFrame(); + +// case UP_ONLINE_REQUEST: +// return new MethaneOnlineRequestFrame(); +// +// case UP_SET_RESPONSE: +// return new MethaneSetResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } + + public static BirmmBaseFrame createSentinelReplyFrameByOperation(String uploadOperationType) { + BirmmOperationTypeEnums operation = BirmmOperationTypeEnums.toType(uploadOperationType); + if (operation != null) { + switch (operation) { + case DOWN_GET_REQUEST: + // GET_REQUEST消息回复GET_RESPONSE 用于远程升级请求数据文件 + return new MethaneGetResponseFrame(); + + case UP_TRAP_REQUEST: + // TRAP_REQUEST消息回复TRAP_RESPONSE + return new SentinelTrapResponseFrame(); + + case UP_ONLINE_REQUEST: + // ONLINE_REQUEST消息回复ONLINE_RESPONSE + return new MethaneOnlineResponseFrame(); + + default: + return null; + } + } else { + return null; + } + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java new file mode 100644 index 0000000..bc97b1a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapRequestFrame.java @@ -0,0 +1,180 @@ +package com.casic.missiles.frame.sentinel; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +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.model.DeviceBizData; +import com.casic.missiles.util.BytesUtil; +import lombok.extern.slf4j.Slf4j; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class SentinelTrapRequestFrame extends BirmmBaseFrame { + + private List bizDataList; + + private final String DEV_TYPE = "Sentinel"; + private final String MESSAGE_TYPE = "Data"; + private final String BIZ_TYPE = DEV_TYPE + MESSAGE_TYPE; + + @Override + public JSONObject toJSON() { + JSONObject json = super.toJSON(); + json.put("devType", DEV_TYPE); + json.put("mType", MESSAGE_TYPE); + + JSONObject body = new JSONObject(); + body.put("bType", BIZ_TYPE); + body.put("logtime", getLogTime().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + body.put("cell", cellTag.getCellVal()); + } + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + body.put("pci", pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + body.put("rsrp", rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + body.put("snr", snrTag.getSnr()); + } + + // 业务数据 + if (bizDataList != null) { + JSONArray datas = new JSONArray(); + for (SentinelBizData bizData : bizDataList) { + datas.add(bizData.toJSON()); + } + body.put("datas", datas); + } + + json.put("mBody", body); + + return json; + } + + @Override + public boolean isBizDataFrame() { + return true; + } + + @Override + public List convertToBizDataList() { + List resultList = new ArrayList<>(); + if (bizDataList != null) { + for (SentinelBizData data : bizDataList) { + DeviceBizData bizData = new DeviceBizData(); + bizData.setBizType(String.valueOf(data.getBizType())); + bizData.setValue(String.format("%.3f", data.getValue())); + bizData.setUptime(data.getUptime()); + + // 电量 + if (getTagList().containsKey(CellTag.class.getSimpleName())) { + CellTag cellTag = (CellTag) getTagList().get(CellTag.class.getSimpleName()).get(0); + bizData.setCell(cellTag.getCellVal()); + } + + // 信号质量 + if (getTagList().containsKey(PCITag.class.getSimpleName())) { + PCITag pciTag = (PCITag) getTagList().get(PCITag.class.getSimpleName()).get(0); + bizData.setPci(pciTag.getPci()); + } + if (getTagList().containsKey(RSRPTag.class.getSimpleName())) { + RSRPTag rsrpTag = (RSRPTag) getTagList().get(RSRPTag.class.getSimpleName()).get(0); + bizData.setRsrp(rsrpTag.getRsrp()); + } + if (getTagList().containsKey(SNRTag.class.getSimpleName())) { + SNRTag snrTag = (SNRTag) getTagList().get(SNRTag.class.getSimpleName()).get(0); + bizData.setSnr(snrTag.getSnr()); + } + + resultList.add(bizData); + } + } + + return resultList; + } + + @Override + public void doParseBizTag() { + if (getTagList().containsKey(UploadTag.class.getSimpleName())) { + handleUploadTag(); + } + + if (getTagList().containsKey(SensorStateTag.class.getSimpleName())) { + handleSensorStateTag(); + } + } + + private void handleUploadTag() { + List tags = getTagList().get(UploadTag.class.getSimpleName()); + + bizDataList = new ArrayList<>(); + + for (BirmmBaseTag tag : tags) { + UploadTag uploadTag = (UploadTag) tag; + // 检查oid是否符合要求 能取到bizType 采集周期 采集开始时间 + boolean isValid = uploadTag.checkOid(); + if (isValid) { + // 找到DateTag 取出其中的日期 + if ( !getTagList().containsKey(DateTag.class.getSimpleName()) ) { + continue; + } + DateTag dateTag = (DateTag) getTagList().get(DateTag.class.getSimpleName()).get(0); + uploadTag.setStartDate(dateTag.getDate()); + + int count = uploadTag.getValueStr().length() / (4 * 2); // 4个字节一个数据 单精度浮点数 + LocalDateTime start = uploadTag.getStartTime(); + for (int i = 0; i < count; i++) { + SentinelBizData bizData = new SentinelBizData(); + + bizData.setBizType(uploadTag.getBizType()); + bizData.setUptime(start); + String hexReversStr = BytesUtil.reverseHexString(uploadTag.getValueStr().substring(i * 4 * 2, (i + 1) * 4 * 2)); + bizData.setValue(BytesUtil.hexStringToFloat(hexReversStr)); // 转成浮点数 + + bizDataList.add(bizData); + + // 加上时间间隔 + start = start.plusMinutes(uploadTag.getInterval()); + } + } + } + } + + private void handleSensorStateTag() { + List tags = getTagList().get(SensorStateTag.class.getSimpleName()); + for (BirmmBaseTag tag : tags) { + SensorStateTag sensorStateTag = (SensorStateTag) tag; + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_1_TAG.getName())) { + // 甲烷传感器状态 + log.info("甲烷传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + if (sensorStateTag.getOid().equals(BirmmTagTypeEnums.SENSOR_STATE_2_TAG.getName())) { + // 甲烷传感器状态 + log.info("静压传感器状态:{}", sensorStateTag.getValueStr().equals("00") ? "正常" : "异常"); + } + + // TODO-LIST + // 传感器状态异常时需要上报异常事件 + } + } +} 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 new file mode 100644 index 0000000..5fe773a --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/sentinel/SentinelTrapResponseFrame.java @@ -0,0 +1,20 @@ +package com.casic.missiles.frame.sentinel; + +import com.casic.missiles.enums.BirmmOperationTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseFrame; + +public class SentinelTrapResponseFrame 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/tag/BirmmTagBuilderFactory.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java new file mode 100644 index 0000000..a7094dd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/BirmmTagBuilderFactory.java @@ -0,0 +1,88 @@ +package com.casic.missiles.frame.tag; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.frame.tag.biz.CellTag; +import com.casic.missiles.frame.tag.biz.DateTag; +import com.casic.missiles.frame.tag.biz.SensorStateTag; +import com.casic.missiles.frame.tag.biz.UploadTag; +import com.casic.missiles.frame.tag.config.*; +import com.casic.missiles.frame.tag.ota.SoftwareVersionTag; +import com.casic.missiles.frame.tag.signal.PCITag; +import com.casic.missiles.frame.tag.signal.RSRPTag; +import com.casic.missiles.frame.tag.signal.SNRTag; + +public class BirmmTagBuilderFactory { + + public static BirmmBaseTag createTagByOid(String oid) { + BirmmTagTypeEnums tag = BirmmTagTypeEnums.toType(oid); + if (null != tag) { + switch (tag) { + case RETRY_TIMES_TAG: + return new RetryTimesTag(); + + case DESTINATION_IP_TAG: + return new DestIPTag(); + + case DESTINATION_PORT_TAG: + return new DestPortTag(); + + case DATE_TAG: + return new DateTag(); + + case DATETIME_TAG: + return new DateTimeTag(); + + case UPLOAD_INTERVAL_TAG: + return new UploadIntervalTag(); + + case START_TIME_TAG: + return new StartTimeTag(); + + case COLLECT_INTERVAL_TAG: + return new CollectIntervalTag(); + + case COLLECT_COUNT_TAG: + return new CollectCountTag(); + + case LOWER_LIMIT_TAG: + return new LowerLimitTag(); + + case UPPER_LIMIT_TAG: + return new UpperLimitTag(); + + case SENSOR_STATE_1_TAG: + case SENSOR_STATE_2_TAG: + case SENSOR_STATE_3_TAG: + case SENSOR_STATE_4_TAG: + case SENSOR_STATE_5_TAG: + // 传感器状态 需要根据设备类型单独处理 + return new SensorStateTag(); + + case CELL_TAG: + return new CellTag(); + + case SOFTWARE_VERSION_TAG: + return new SoftwareVersionTag(); + + case PCI_TAG: + return new PCITag(); + + case RSRP_TAG: + return new RSRPTag(); + + case SNR_TAG: + return new SNRTag(); + + default: + return null; + } + } + + // 业务上传报表 + if (oid.startsWith("C")) { + return new UploadTag(); + } + return null; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java new file mode 100644 index 0000000..43dbb41 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/CellTag.java @@ -0,0 +1,25 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CellTag extends BirmmBaseTag { + + final String CELL_TAG_OID = "60000020"; + + int cellVal; + + @Override + public String toString() { + return super.toString() + "[value: " + cellVal + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + cellVal = Integer.parseInt(valueStr, 16); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java new file mode 100644 index 0000000..2514196 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/DateTag.java @@ -0,0 +1,33 @@ +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 java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTag extends BirmmBaseTag { + + final String DATE_TAG_OID = "10000050"; + + LocalDate date; + + @Override + public String toString() { + return super.toString() + "[value: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + date = LocalDate.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java new file mode 100644 index 0000000..a551cd5 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/SensorStateTag.java @@ -0,0 +1,7 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.frame.base.BirmmBaseTag; + +public class SensorStateTag extends BirmmBaseTag { + +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java new file mode 100644 index 0000000..450a755 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/biz/UploadTag.java @@ -0,0 +1,55 @@ +package com.casic.missiles.frame.tag.biz; + +import com.casic.missiles.enums.BirmmDataBizTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadTag extends BirmmBaseTag { + + private int bizType; + private int interval; + private int startMin; + private LocalDateTime startTime; + + @Override + public String toString() { + return super.toString(); + } + + public boolean checkOid() { + long oidValue = Long.parseLong(getOid(), 16); + + // 数据类型不在范围内则返回false + bizType = (int) (((oidValue >> 24) & 0x0F) | ((oidValue >> 18) & 0x30)); + if(BirmmDataBizTypeEnums.toType(bizType) == null) { + return false; + } + interval = (int) ((oidValue >> 11) & 0x7FF); + startMin = (int) (oidValue & 0x7FF); + + int hour = startMin / 60; + int minute = startMin % 60; + + startTime = LocalDateTime.of(2000, 1, 1, hour, minute, 0); + + return true; + } + + public void setStartDate(String dateStr) { + LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + setStartDate(date); + } + + public void setStartDate(LocalDate date) { + startTime = startTime.withYear(date.getYear()); + startTime = startTime.withMonth(date.getMonthValue()); + startTime = startTime.withDayOfMonth(date.getDayOfMonth()); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java new file mode 100644 index 0000000..6df22bd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectCountTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectCountTag extends BirmmBaseTag { + + final String COLLECT_COUNT_TAG_OID = "10000106"; + + // TYPE_U16整型,数据上报的采集次数,范围: 1 – 1440 + int count; + + @Override + public String toString() { + return super.toString() + "[value: " + count + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + count = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java new file mode 100644 index 0000000..def754c --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/CollectIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CollectIntervalTag extends BirmmBaseTag { + + final String COLLECT_INTERVAL_TAG_OID = "10000105"; + + // TYPE_U16整型,数据采集间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java new file mode 100644 index 0000000..bcb3988 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DateTimeTag.java @@ -0,0 +1,62 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DateTimeTag extends BirmmBaseTag { + + final String DATETIME_TAG_OID = "10000051"; + + LocalDateTime dateTime; + + @Override + public String toString() { + return super.toString() + "[value: " + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.DATETIME_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.DATETIME_TAG.getLength()); // 长度 + + int year = dateTime.getYear() - 2000; + int month = dateTime.getMonthValue(); + int day = dateTime.getDayOfMonth(); + int hour = dateTime.getHour(); + int minute = dateTime.getMinute(); + int second = dateTime.getSecond(); + + result += String.format("%02x", year); + result += String.format("%02x", month); + result += String.format("%02x", day); + result += String.format("%02x", hour); + result += String.format("%02x", minute); + result += String.format("%02x", second); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + String hexY = valueStr.substring(0, 2); + String hexM = valueStr.substring(2, 4); + String hexD = valueStr.substring(4, 6); + + String hexH = valueStr.substring(6, 8); + String hexMin = valueStr.substring(8, 10); + String hexS = valueStr.substring(10, 12); + + dateTime = LocalDateTime.of(BytesUtil.hexStringToUInt(hexY) + 2000, BytesUtil.hexStringToUInt(hexM), BytesUtil.hexStringToUInt(hexD), + BytesUtil.hexStringToUInt(hexH), BytesUtil.hexStringToUInt(hexMin), BytesUtil.hexStringToUInt(hexS)); + } +} 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 new file mode 100644 index 0000000..9bb4820 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestIPTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestIPTag extends BirmmBaseTag { + + final String DESTINATION_IP_TAG_OID = "10000022"; + + String ip; + + @Override + public String toString() { + return super.toString() + "[value: " + ip + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + ip = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} 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 new file mode 100644 index 0000000..ef29dca --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/DestPortTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DestPortTag extends BirmmBaseTag { + + final String DESTINATION_PORT_TAG_OID = "10000023"; + + String port; + + @Override + public String toString() { + return super.toString() + "[value: " + port + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + port = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java new file mode 100644 index 0000000..da05817 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/LowerLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class LowerLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000900"; + + // 单精度浮点数 + float lowerLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + lowerLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + lowerLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} 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 new file mode 100644 index 0000000..6d21a35 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/RetryTimesTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RetryTimesTag extends BirmmBaseTag { + + final String RETRY_TIMES_TAG_OID = "1000000A"; + + // TYPE_U8整型,重传次数 1-10 + int times; + + @Override + public String toString() { + return super.toString() + "[value: " + times + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + times = Integer.parseInt(valueStr, 16); + } +} 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 new file mode 100644 index 0000000..925d162 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/StartTimeTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class StartTimeTag extends BirmmBaseTag { + + final String START_TIME_TAG_OID = "10000104"; + + // TYPE_U16整型,数据采集开始分钟,范围: 0 – 1440 + int startMinute; + + @Override + public String toString() { + return super.toString() + "[value: " + startMinute + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + startMinute = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java new file mode 100644 index 0000000..f2392ee --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UploadIntervalTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UploadIntervalTag extends BirmmBaseTag { + + final String UPLOAD_INTERVAL_TAG_OID = "10000062"; + + // TYPE_U16整型,数据上报间隔,范围: 3 – 1440 + int interval; + + @Override + public String toString() { + return super.toString() + "[value: " + interval + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + interval = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java new file mode 100644 index 0000000..a0bbe7d --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/config/UpperLimitTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.config; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UpperLimitTag extends BirmmBaseTag { + + final String UPPER_LIMIT_TAG_OID = "10000901"; + + // 单精度浮点数 + float upperLimit; + + @Override + public String toString() { + return super.toString() + "[value: " + upperLimit + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + upperLimit = Float.intBitsToFloat(Integer.parseInt(BytesUtil.reverseHexString(valueStr), 16)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java new file mode 100644 index 0000000..9daab43 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/NeedOTATag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class NeedOTATag extends BirmmBaseTag { + + final String NEED_OTA_TAG_OID = "60000600"; + + boolean need; + + @Override + public String toString() { + return super.toString() + "[value: " + need + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_NEED_OTA_TAG.getLength() * 2 + "x", need ? 1 : 0); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + need = Boolean.parseBoolean(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java new file mode 100644 index 0000000..0056fb8 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageCRCTag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageCRCTag extends BirmmBaseTag { + + final String PACKAGE_CRC_TAG_OID = "60000603"; + + String packCRC; + + @Override + public String toString() { + return super.toString() + "[value: " + packCRC + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_CRC_TAG.getLength() * 2 + "x", packCRC); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + packCRC = valueStr; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java new file mode 100644 index 0000000..76566e0 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageDataTag.java @@ -0,0 +1,31 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.tomcat.util.buf.HexUtils; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageDataTag extends BirmmBaseTag { + + final String PACKAGE_DATA_TAG_OID = "60000601"; + + byte[] data; + + @Override + public String toString() { + return super.toString() + "[value: " + HexUtils.toHexString(data) + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_DATA_TAG.getName(); // OID + result += String.format("%04d", data.length); // 长度 + result += HexUtils.toHexString(data); + + return result; + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java new file mode 100644 index 0000000..8331ebd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/PackageSizeTag.java @@ -0,0 +1,36 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PackageSizeTag extends BirmmBaseTag { + + final String PACKAGE_SIZE_TAG_OID = "60000602"; + + int packSize; + + @Override + public String toString() { + return super.toString() + "[value: " + packSize + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_PACKAGE_SIZE_TAG.getLength() * 2 + "x", packSize); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + packSize = Integer.parseInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java new file mode 100644 index 0000000..35cf112 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestOffsetTag.java @@ -0,0 +1,37 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.enums.BirmmTagTypeEnums; +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RequestOffsetTag extends BirmmBaseTag { + + final String REQUEST_OFFSET_TAG_OID = "20000102"; + + // 本次请求的升级包偏移量 + int requestOffset; + + @Override + public String toString() { + return super.toString() + "[value: " + requestOffset + "]"; + } + + @Override + public String toProtocolString() { + String result = ""; + result += BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getName(); // OID + result += String.format("%04d", BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength()); // 长度 + result += String.format("%0" + BirmmTagTypeEnums.OTA_REQUEST_OFFSET_TAG.getLength() * 2 + "x", requestOffset); + + return result; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + requestOffset = Integer.parseInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java new file mode 100644 index 0000000..50b0b72 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/RequestSizeTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RequestSizeTag extends BirmmBaseTag { + + final String REQUEST_SIZE_TAG_OID = "20000100"; + + // 本次请求的升级包大小 + int requestSize; + + @Override + public String toString() { + return super.toString() + "[value: " + requestSize + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + requestSize = Integer.parseInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java new file mode 100644 index 0000000..0bf69fd --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/ota/SoftwareVersionTag.java @@ -0,0 +1,26 @@ +package com.casic.missiles.frame.tag.ota; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class SoftwareVersionTag extends BirmmBaseTag { + + final String SOFTWARE_VERSION_TAG_OID = "60000500"; + + String version; + + @Override + public String toString() { + return super.toString() + "[value: " + version + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + version = new String(BytesUtil.hexStringToBytes(valueStr)); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java new file mode 100644 index 0000000..f1b5fef --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/PCITag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.signal; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PCITag extends BirmmBaseTag { + + final String PCI_TAG_OID = "60000511"; + + // TYPE_U16整型,主小区物理小区号PCI,范围: 0 – 503 + int pci; + + @Override + public String toString() { + return super.toString() + "[value: " + pci + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + pci = BytesUtil.hexStringToUInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java new file mode 100644 index 0000000..7823836 --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/RSRPTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.signal; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RSRPTag extends BirmmBaseTag { + + final String RSRP_TAG_OID = "60000513"; + + //带符号整型,主小区RSRP值,单位dBm。仅在RRC-IDLE状态时可用 -140 ~ -40 越大越好 + int rsrp; + + @Override + public String toString() { + return super.toString() + "[value: " + rsrp + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + rsrp = BytesUtil.hexStringToSInt(valueStr); + } +} diff --git a/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java new file mode 100644 index 0000000..a5d283f --- /dev/null +++ b/sensorhub-service-birmm/src/main/java/com/casic/missiles/frame/tag/signal/SNRTag.java @@ -0,0 +1,27 @@ +package com.casic.missiles.frame.tag.signal; + +import com.casic.missiles.frame.base.BirmmBaseTag; +import com.casic.missiles.util.BytesUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class SNRTag extends BirmmBaseTag { + + final String SNR_TAG_OID = "60000516"; + + //带符号整型,主小区lart SNR值,单位dB。仅在RRC-IDLE状态时可用 -20 ~ 50 越大越好 + int snr; + + @Override + public String toString() { + return super.toString() + "[value: " + snr + "]"; + } + + @Override + public void setValueStr(String valueStr) { + super.setValueStr(valueStr); + snr = BytesUtil.hexStringToSInt(valueStr); + } +} diff --git a/sensorhub-support/pom.xml b/sensorhub-support/pom.xml index abc3dda..cc12975 100644 --- a/sensorhub-support/pom.xml +++ b/sensorhub-support/pom.xml @@ -12,6 +12,11 @@ sensorhub-support + + com.casic + casic-iot-model + 1.0.0-SNAPSHOT + org.springframework.boot diff --git a/sensorhub-support/src/main/java/com/casic/missiles/config/AepConfig.java b/sensorhub-support/src/main/java/com/casic/missiles/config/AepConfig.java deleted file mode 100644 index 844d5dc..0000000 --- a/sensorhub-support/src/main/java/com/casic/missiles/config/AepConfig.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@Data -@Configuration -@ConfigurationProperties(prefix = "sensorhub.aep") -public class AepConfig { - - private String key = "ke4zM3hld29"; - private String secret = "35ykNutA1t"; - private String paramMasterKey = "0a77886fae4f4ff68d926adeb3a3ef5b"; - private Integer ttl; - private String operator; - -} diff --git a/sensorhub-support/src/main/java/com/casic/missiles/enums/BirmmDeviceTypeEnums.java b/sensorhub-support/src/main/java/com/casic/missiles/enums/BirmmDeviceTypeEnums.java index f05c3c3..92336b6 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/enums/BirmmDeviceTypeEnums.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/enums/BirmmDeviceTypeEnums.java @@ -9,11 +9,11 @@ */ @Getter public enum BirmmDeviceTypeEnums { - METHANE("4", "BIRMM-RTU100N", "31"), - WELL("6", "BIRMM-WELL100N", "41"), - LIQUID_GAS("25", "", "32"), - SENTINEL("28", "", "34"), - METHANE_BIZ("32", "", "33"), + METHANE("4", "BIRMM-RTU100N", "31"), // 燃气智能监测终端 + WELL("6", "BIRMM-WELL100N", "41"), // 井盖 + LIQUID_GAS("25", "", "32"), // 燃液一体化设备 + SENTINEL("28", "", "34"), // 管盯 + METHANE_BIZ("32", "", "33"), // 商用燃气 DEFAULT("", "", "");